2018年10月13日 星期六

《面試官別再問》PHP 5到PHP 7常用語法整理

資料類型(Boolean,String,Array)

    1.Boolean:空對象在4.0以後都視為true。
    2.String:內部結構類似array,可以像array一樣呼叫
  •     $str = 'abcde';
        echo $str[1];  //b
        echo $str{2};  //c

   全域變數

  • SERVER_ADDR IP地址127.0.0.1
  • SERVER_NAME 主機名localhost
  • SERVER_SOFTWARE 服務器類型nginx
  • REMOTE_ADDR 客戶端IP. 127.0.0.1 
  • $_FILES['file']['name'] 圖片原名稱
  • $_FILES['file']['type'] 圖片MIME類型
  • $_FILES['file']['size'] 圖片大小
  • $_FILES['file']['tmp_name'] 服務器端暫存名稱
    常量
    5.3之後後可以使用const來定義常數  
const DEBUG = true;

運算符
<=> 比較運算符,7.0 之後支援
就是看兩個表達式值的大小,三種關係: = 返回0、< 返回-1、 > 返回 1
// Integers
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
 空接操作符:
?? 空合併運算符  PHP7特性。
$name = $_POST['name'] ?? '';  //如果前面的值不为null,则返回本身,否则返回后面的值
$name = $_POST['name'] ?: ''; ////如果前面的值不为null,则返回本身,否则返回后面的值
 流程控制:goto 5.3版本以上有效
操作符可以用來跳轉到程序中的另一位置。該目標位置可以用目標名稱加上冒號來標記,而跳轉指令是goto 之後接上目標位置的標記。PHP 中的goto 有一定限制,目標位置只能位於同一個文件和作用域,也就是說無法跳出一個函數或類方法,也無法跳入到另一個函數。也無法跳入到任何循環或者switch 結構中。可以跳出循環或者switch,通常的用法是用goto 代替多層的break。
goto next;
echo 'abc';

next:
echo 'def';

//输出 def

函數

匿名函數:Anonymous functions 5.3版本有效
從父作用域中繼承變量怎麼辦
//这里定义一个默认的输出名字的方式
$args = 'My name is ';

//使用 use() 来引用父级的变量,最后输出结果与上边一致 
$test = function($name='he') use($args ) {
    echo $tpl.$name;
};
$test();
需要注意的是,閉包函數的父作用域,是定義它的作用域,不是調用的作用域

類和對象

多繼承實現方式trait:
1.trait和class是相似的概念,但不能被實例化  
2.一個類可以使用多個trait,優先級是  class >  trait >  父类继承的方法
3.使用insteadof 來解決tarit衝突  
4.使用as,來修改方法的訪問控制  
5.在trait中也可以使用tarit和在class中用法一致

trait A {
    public function say(){
        echo 'trait  A';
    }
}

trait B {
    public function say(){
        echo 'trait B';
    }

    public function walk(){
        echo 'walk B';
    }
}

class Person {
    use A, B{
        B :: say insteadof A; // 使用B的say方法代替了A的say方法
        walk as protected;    // 将walk 设置为受保护的
    }


}

$obj = new Person;
$obj->say();  // echo trait A;
$obj->walk(); // 提示不能访问一个受保护的方法

沒有留言:

張貼留言

網誌存檔