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

 

函数

doubleval()   floatval()
intval()         (int)  
 
 
获取毫秒时间
<?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可以访问这块内存

 

 

posted @ 2017-04-27 09:40  窗外是绿色的  阅读(767)  评论(0编辑  收藏  举报