PHP 变量、数组(array) 的使用

    开发微信平台的时候,选了使用脚本语言php,正好作为自己的一个学习方向。正如师兄所推荐的,需要学好一门高级语言(JAVA...),一门脚本语言(php...),一门接近底层的语言(C...)。

   php基本的语法与JavaScript类似,变量的定义的时候不需要规定类型,以“$”符号开头,可以存储 整形和 string类型。PHP4以后引入了引用的概念,类似于C/C++的 “&“ --- 所以可以这样写 $a= "Ray";  $b = &$a;  php对单引号处理为纯文本,双引号包含的内容会查询处理,如echo  '$a' 会被直接输出 $a, 而echo "$a"; 会输出Ray。

    需要提一下的是php中的预定义变量,这些变量依赖于服务器版本和配置,例如 $_GET['id']从 URL http://www.example.com/test.php?id=1 中获取 id 值。目前对于php预定义变量使用少,相关知识之后再做补充。


====================变量=========================

    重点学习一下php中变量的使用范围。像其他语言一样,局部变量具有相应的作用域,以例子说明:例子取自:http://www.cnblogs.com/confach/articles/470492.html   

";
 }
 test(1);
 test(2);
?>
输出为:

1=1 

2=1

解决办法1: 使用global 变量, 注意global 关键字后面只可接变量名,不可进行赋值操作。

";
} 
 test(1); 
 test(2);
?>

输出为:

1=1 

2=2

解决办法2:使用$GLOBALS超全局变量

";
 }
 test(1);
 test(2);
?>

输出为:
1=1 
2=2
解决办法3:使用static 静态变量 ,不过需要在函数内申明。


======================数组==========================
PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。需要指出的是keys既可以默认,则为0,1,2,3... 也可以是自己规定的string类型。并且映射可以包含多层。但是key存在默认强制转换的机制,需要注意。
具体规则如下:
1:包含有合法整型值的字符串会被转换为整型。例如键名 "8" 实际会被储存为 8。但是 "08" 则不会强制转换,因为其不是一个合法的十进制数值。
2:浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。
3:布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。
4:Null 会被转换为空字符串,即键名 null 实际会被储存为 ""。
5:数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type。
举例:

 "a",
    "1"  => "b",
    1.5  => "c",
    true => "d",
    2    => "e",
    "02" => "f",
);
var_dump($array);
?>
输出: array(3) { [1]=> string(1) "d" [2]=> string(1) "e" ["02"]=> string(1) "f" }
1:当指定部分key时,情况如下
 "c",
         "d",
    8 => "e",
);
var_dump($array);
?>
输出:array(5) { [0]=> string(1) "a" [1]=> string(1) "b" [6]=> string(1) "c" [7]=> string(1) "d" [8]=> string(1) "e" } 
可以看到c对应为6,a对应0,b对应1,此时如果想要查看echo $array[3]等,会报错undefined offset,因为这几个值就没有定义。
2:多层深度嵌套,例子如下
 "bar",
    42    => 24,
    "multi" => array(
         "dimensional" => array(
             "array" => "foo"
         )
    )
);
var_dump($array["foo"]);
var_dump($array[42]);
var_dump($array["multi"]["dimensional"]["array"]);
?>
输出:string(3) "bar" int(24) string(3) "foo"
可以看到,多层嵌套数组可以通过下标访问,并且使用[]与{ } 均可以访问数组。
3:数组下标的理解
 1, 12 => 2);


$arr[] = 56;    // This is the same as $arr[13] = 56;
                


$arr["x"] = 42; // This adds a new element to
                // the array with key "x"
$arr[14] = 45; // This adds a new element to


var_dump($arr);
?>
输出:array(4) { [12]=> int(2) [13]=> int(56) ["x"]=> int(42) [14]=> int(45) }
可以看出,如果不写下标,会默认在末尾处添加值,并在上一位的基础上+1,"x"的存储通过散列函数,对应于其他位置,经验证与14的位置并不冲突。
进一步修改:
 1, "y" => 2);


$arr[] = 56;    // This is the same as $arr[13] = 56;
                // at this point of the script


$arr["x"] = 42; // This adds a new element to
                // the array with key "x"
$arr[] = 45; // This adds a new element to


var_dump($arr);
?>
输出:array(5) { [5]=> int(1) ["y"]=> int(2) [6]=> int(56) ["x"]=> int(42) [7]=> int(45) }
可以看出,下标默认以索引值为基准,在最大的索引值上+1,自定义的string类型的key不会影响。

对于数组的基本理解于此,下一次将学习array相应的函数,这些函数的功能将大大简便我们对数组的操作。欢迎大家指正其中错误。p.s 例子参考下述资料,并亲测通过,部分代码稍作了修改。

参考资料:
PHP 手册     http://www.php.net/manual/zh/language.types.array.php#language.types.array.syntax.modifying
某一技术博客  http://www.cnblogs.com/confach/articles/470492.html

你可能感兴趣的:(PHP)