php 重难点
1、isset()函数 、array_key_exists()函数、empty()函数
<?php $a = array ('test' => 1, 'hello' => NULL); var_dump( isset ($a['test') ); // TRUE var_dump( isset ($a['foo') ); // FALSE var_dump( isset ($a['hello') ); // FALSE // 'hello' 等于 NULL,所以被认为是未赋值的。 // 如果想检测 NULL 键值,可以试试下边的方法。 var_dump( array_key_exists('hello', $a) ); // TRUE ?>
isset() 函数
若变量不存在则返回 FALSE
若变量存在且其值为NULL,也返回 FALSE
若变量存在且值不为NULL,则返回 TURE
当 ""、0、"0"、NULL、、FALSE、array() 或者 变量不存在时 empty($tmp) 均返回 true
array_key_exists() 函数比较宽泛,当值为 null “” “0” 时均返回true,只要你在array中设置了key
综上: array_key_exists() 函数要求最低, isset()函数次之 empty()函数检测最严格
静态变量+静态方法:
<?php class Test{ const STATUS_NORMAL = 0; public static $count = 1; public static function echoConst(){ //函数内部调用常量 echo self::STATUS_NORMAL; } public static function strPrint(){ echo 'this is strPrint static function \n\n'; } public static function addCount(){函数内部调用函数 //函数内部调用类变量 self::$count += 1; } public function staticFuncInvoke(){
//函数内部调用静态方法 self::strPrint(); } } $test = new Test(); $test->addCount(); $test->addCount(); $test->addCount(); //调用类常量 echo $test::STATUS_NORMAL; echo Test::STATUS_NORMAL; //调用静态变量 echo $test::$count; echo Test::$count; //调用静态方法 $test->staticFuncInvoke(); Test::staticFuncInvoke(); ?>
php变量及方法调用总结
<?php $global_book = "编程测试书籍456"; function test() { echo "test\n\n"; } class MyTest { protected $book = "编程测试书籍"; function __construct() { //调用全局方法 test(); //调用全局变量(两种方法) $this->print_ok($GLOBALS['global_book']); global $global_book; $this->print_ok($global_book); //调用局部变量(仅此一种方法) $temp = "good"; $this->print_ok($temp); //调用类方法(仅此一种方法) $this->print_ok($this->get_name()); //调用类变量(仅此一种方法) $this->print_ok($this->book); } private function print_ok($str) { echo "\n"; echo $str; echo "\n\n"; } private function get_name() { return "ivar1001"; } } new MyTest(); ?>
一定注意: $this 不是 this
bug一
<?php $son_search_option = array(); //正确的添加 $search_option[] = " accounts_receivable_id in $id_set"; //另一种错误的添加 $search_option[] = array( accounts_receivable_id in $id_set" ); ?>
bug二
<?php $result = strpos("Hello world!","world"); if($result == false) echo "cuowu"; else echo "zhegnque"; ?>
strpos() 函数用于检索字符串内指定的字符或文本。
如果找到匹配,则会返回首个匹配的字符位置。如果未找到匹配,则将返回 FALSE。
<?php echo str_replace("world","Shanghai","Hello world!"); ?>
str_replace("old string", "new string", "parent string"); 将 parent string 中 的 old string 全部替换为 new string (大小写严格),
str_replace("old string", "new string", "parent string"); 将 parent string 中 的 old string 全部替换为 new string (不区分大小写)
bug三
单引号字符串中的变量是无效的
<?php $name = "good"; $str = ‘$name dook’; echo $str; ?>
上述代码会输出 $name dook
当换成双引号时,正确输出 good dook
bug四
单引号 中的转义字符是无效的
<?php $name = "good"; echo '$name \n\n'; $str = "$name dook"; echo $str; ?>
上述代码会输出 $name \n\ngood dook
当把单引号换成双引号时,正常输出换行
json格式转化
通过json_decode() json_encode() 函数可以进行数组与json格式字符串之间的转换
<?php $fruits = array( "apple" => 5, "orange" => 6, "ice" => 3 ); $jsonStr = json_encode($fruits); $obj = json_decode($jsonStr, true); var_dump($obj); ?>
其中: json_encode 将$fruits 数组转换成了相应的json字符串(可供返回)
json_decode($jsonStr, true)将json字符串转换成了关联数组. json_decode($jsonStr) 会将 json字符串转换成 对象
trim rtrim ltrim
<?php $str = "Hello WorldWorld"; echo $str . "\n"; echo rtrim($str,"World!"); ?>
上述代码的输出结果为 :
Hello World World
Hello
故: rtrim 去掉字符串右侧的一个World 或者多个连续的World
ltirm 去掉字符串左侧的多个连续str(多个str之间不能有空格)
trim 去掉字符串两侧的多个连续空白符(包括空格)
条件判断
<?php $a = ""; if($a) echo "good"; else echo "wrong"; ?>
当 $a = "" false 0 时 均判断为 false
当 $a = " "时,true ,非0 时均判断为true
函数
<?php list($ss, $s) = explode(" ", microtime()); $time = $s + $ss; echo $time; ?>
其中 $ss 为带小数点的秒数,且 $ss < 1; $s 为从1970-01-01 00:00:00开始到现在的秒数
array_unique
该函数返回数组值的唯一构成的数组,如果不同的键有相同的值,则舍弃后一个键
array_merge
该函数根据键将多个数组合并,如果有相同的键,则后面的value覆盖前面的value
array_key_exists($key, $array)
该函数判断$array 中是否有 $key 这个键
in_array($value, $array)
该函数判断$array 中是否有 $value 这个值
substr($str, $start, $count)
1、该函数截取$str 字符串(下标从 0 开始) 从 $start 开始的 $count 个字符;
2、若 $count < 0 ,则返回 从 $start 位置开始的所有字符 除去 倒数的 |$count| 个字符
<?php $a = "temp abd sdjfksdf"; echo strlen(substr($a, 0, 25)); echo "\n"; echo substr($a, 5, 2); echo "\n"; echo substr($a, 5, -4); ?>
输出结果如下所示:
php 中竟然允许函数中存在静态变量。。。
<?php class Test { function get_data() { static $i = 1; echo $i++; } } $test = new Test(); for($i = 0; $i <3; $i++) { $test->get_data(); } ?>
上述代码的输出结果为:“123”
备注:java中不允许存在静态的局部变量,php真是太神奇了
null 与 unset的区别:
先上代码:
class Test{} $a = new Test(); $b = $a; $c = &$a; $a = null; 或者 unset($a); var_dump($a);echo '<br>'; var_dump($b);echo '<br>'; var_dump($c);echo '<br>';
$a = null 输出为:
NULL object(Test)#1 (0) {} NULL
unset($a) 输出:
NULL object(Test)#1 (0) {] object(Test)#1 (0) {]
当$a 与 $c 指向同一块内存地址,当$a = null时,把这块内存的内容清空了;当unset($a) 时,只是删掉了这个变量$a,但是$a 指向的内存内容未改变,通过$c可以访问这块内存