PHP其餘知識集合

命令行執行PHP代碼三種方式

  • 一、/usr/local/php/bin/php 後面跟上某個PHP文件
  • 二、/usr/local/php/bin/php -r 「這裏直接寫上PHP代碼」
  • 三、建立一個文件,在第一行寫上下面代碼php

    #! /usr/local/php/bin/php 
       <?php
           ....

命令行傳參

  • 兩個全局變量
    $argc和$argv
  • php -v 經過$argv[1]能夠獲取到-v

PHP換行

  • 在控制檯輸入換行
    windows系統是\r\n,linux系統是\n,通常直接使用PHP_EOL
  • 在HTML裏面換行
    輸入<br/>

對象(資源)傳遞

  • 值傳遞
    除了對象和資源,其餘類型的值傳遞都是數據拷貝,各自獨立。
    而對象和資源的值傳遞很特別,看起來很像引用傳遞,但其實只是中間多了一個對象標識。
    圖片描述
  • 引用傳遞
    除了對象和資源,其餘類型的引用傳遞都是指向一樣的數據,各自互相影響。
    而對象和資源的引用傳遞都是指向中間的對象標識。
    圖片描述

對象數組的json化

  • 對象與關聯數組的json_encode()都會轉化成{"name":value}字符串形式,只有純索引數組纔會轉化成[value1,value2]字符串形式
  • 對象數組的字符串使用json_decode()會轉成對象數組,若是使用json_decode($strArr,true)會轉成二維數組

Linux與Win文件路徑分隔符

  • windows使用的是 \
  • linux使用的是 /
  • 在PHP提供了一個內置常量解決不一樣系統中路徑的問題:DIRECTORY_SEPARATOR
  • linux只可使用 /,而windows 兩種均可以使用,因此通常都轉換成linux的分隔符
str_replace('\\', '/', __FILE__)

Linux、Mac與Win 文本換行符

  • 在unix系列用 \n
  • 在windows系列用 \r\n
  • 在mac用 \r
  • PHP提供PHP_EOL來替代,以提升代碼的源代碼級可移植性
echo PHP_EOL;
           //windows平臺至關於    echo "\r\n";
           //unix\linux平臺至關於    echo "\n";
           //mac平臺至關於    echo "\r";

父類中也能夠調用子類的方法(使用反射)

  • 在父類中定義(_initialize()父類中沒有)
public function __construct() {
         //控制器初始化
         if(method_exists($this,'_initialize'))
         $this->_initialize();
    }
  • 在子類中定義_initialize()方法
  • 最後再實例化子類時,就會在父類的構造函數中調用子類定義的方法

防止頁面超時

  • set_time_limit ( int $seconds ) //設置腳本最大執行時間
  • 設置容許腳本運行的時間,單位爲秒。若是超過了此設置,腳本返回一個致命的錯誤。默認值爲30秒

PHP中超全局變量$GLOBALS和global的區別

  • $GLOBALS是外部的全局變量自己
  • global是外部全局變量的同名引用或者指針
<?php
    $var1 = 1;
    function test(){
        global $var1;
        unset($var1);
    }
    test();
    echo $var1; //輸出1
?>

<?php
    $var1 = 1;
    function test(){
        unset($GLOBALS[‘var1′]);
    }
    test();
    echo $var1;//輸出空白
?>

PHP中的錯誤抑制符@的使用

  • @的做用:只是不讓系統報錯,屏蔽了錯誤
  • @的適用:變量,函數和 include 調用,常量
  • @的應用:
    出錯了對你影響不大, 你也不關心這個錯誤是什麼, 你也不會安排額外的邏輯來處理這種錯誤, 那麼你可使用錯誤抑制. 不然, 請你使用額外的邏輯來判斷錯誤。
    PHP通常異常處理:最重要是要捕獲到異常,而後作一些特殊處理
  • @的例子:
@include('file');
//等同
$foo = error_reporting(0);
include('file');
error_reporting($foo);
//因此不少步驟都重複了,因此儘可能少用,避免開銷

PHP類內部調用類外部定義的變量(3種方式),實如今類中引用外部定義的全局變量

  • 經過傳遞外部參數到類內部
<?php
        $url = 'http://www.51-n.com/';
        
        class test{
                public $url;
                function __construct($url=''){
                        $this->url = $url;
                }
                function showUrl(){
                        echo $this->url;
                }
        }
        
        $test = new test($url);
        $test->showUrl();
?>
  • 在PHP類方法中使用global關鍵字直接引用類外部變量
<?php
        $url = 'http://www.51-n.com/';
        
        class test{
                public $url;
                function showUrl(){
                        global $url;
                        $this->url = $url;
                        echo $this->url;
                }
        }
        
        $test = new test($url);
        $test->showUrl();
?>
  • 在PHP類方法中直接使用$GLOBALS全局數組引用類外部變量
<?php
        $url = 'http://www.51-n.com/';
        
        class test{
                public $url;
                function showUrl(){
                        $this->url = isset($GLOBALS['url'])?$GLOBALS['url']:'';
                        echo $this->url;
                }
        }
        
        $test = new test($url);
        $test->showUrl();
?>

PHP性能優化

  • 少寫PHP代碼,多用PHP自身能力(內置變量、常量、函數)
  • PHP內置函數的性能優劣選擇
  • 建議不要使用錯誤抑制符@
  • 減小計算密集型業務
  • 避免在循環內循環條件作運算

htmlentities()和htmlspecialchars()區別

  • htmlspecialchars() 只轉化html的5種字符
&   &amp;

"   &quot;

'   &#039; (for ENT_HTML401) or &apos; (for ENT_XML1, ENT_XHTML or ENT_HTML5), but only when ENT_QUOTES is set 

<   &lt;

>   &gt;
  • htmlentities() 轉化全部的html代碼,除上面5種字符之外,中文也會轉化成html實體
$str='<a href="test.html">測試頁面</a>'; 
echo htmlentities($str);  // <a href="test.html">²âÊÔÒ³Ãæ</a> 

$str='<a href="test.html">測試頁面</a>'; 
echo htmlspecialchars($str);  // <a href="test.html">測試頁面</a>
  • 有中文的時候,最好用 htmlspecialchars ,不然可能亂碼
  • htmlspecialchars() 對應 htmlspecialchars_decode()
  • htmlentities() 對應 html_entity_decode()

$_POST、$HTTP_RAW_POST_DATA與php://input的區別

  • 因爲$HTTP_RAW_POST_DATAphp://input做用同樣,但區別以下:

一、$HTTP_RAW_POST_DATA 須要配置 php.ini 中的 always_populate_raw_post_data 值爲 On 纔會生效,而 php://input 無需配置就生效
二、當 $_POSTphp://input 能夠取到值時 $HTTP_RAW_POST_DATA 爲空
三、$HTTP_RAW_POST_DATA 從php5.6起就開始過期了,並在php7.0中正式刪除,而用 php://input 替代html

相同點:
一、不能用於 enctype="multipart/form-data"(也叫Content-Type)linux

  • $_POSTphp://input 的區別以下:

一、Content-typeapplication/x-www.form-urlencodedmultipart/form-data時,$_POST纔有值,獲得的數據是通過urldecode解碼處理
二、除了Content-typemultipart/form-data時,php://input沒值之外,其餘狀況都有值,例如:application/json、text/xml、text/plain
三、文件上傳只能經過$_POST獲取值
四、其餘方式如:put/delete,也只能經過php://input獲取json

instanceof使用注意

  • 判斷對象是否屬於某類,此類能夠是父類、爺類就會返回true,不然返回false

echo、print、print_r()、printf()、sprintf()、var_dump()區別

  • echo :是語句不是函數,沒有返回值,可輸出多個變量值,不能輸出數組和對象,只能打印簡單類型(如int,string,bool,float,null)。
  • print :是語句不是函數,有返回值 1 ,只能輸出一個變量,不能輸出數組和對象,只能打印簡單類型(如int,string,bool,float,null)。
  • echo與print基本用法一致,但區別以下:
    一、echo沒有返回值,print有返回值
    二、echo能夠輸出多個參數,print只能夠輸出一個參數

  • print_r :是函數,能夠打印複合類型,例如:array、object等,主要用於數組打印
  • printf :是函數,把文字格式化之後輸出。
  • sprintf :是函數,不打印,而是返回格式化後的文字,其餘的與printf同樣。
  • var_dump :是函數,輸出變量的內容、類型或字符串的內容、類型、長度。經常使用來調試。

運算符 &、|、&&、|| 之間的區別

  • & :位與運算符,返回是int數據類型
  • | :位或運算符,返回是int數據類型
//位與或位或時 數據類型轉換
TRUE => 1
FALSE => 0
''與'0' => 0  //按字符串轉數值類型的規矩
[] => 0   
非空數組 => 1

12 | [] //12
TRUE & '8' //0
TRUE | '8' //9
  • && :與運算符,返回是bool數據類型
  • || :或運算符,返回是bool數據類型

子類重寫父類方法的限制

  • 父類中final方法是不能夠重寫的
  • 子類重寫父類方法只可寬鬆,不可嚴謹
  • 重寫方法名稱必須相同

大括號的做用

  • 做用域-------例如:function fn(){}
  • $str{4}在字符串的變量的後面跟上{},大括號和中括號同樣都是把某個字符串變量當成數組處理
  • {$val},這時候大括號起的做用就是,告訴PHP,括起來的要當成變量處理。

var_export()用法

  • php數據原型輸出
$msg = 'xxx';
var_export($msg); //輸出'xxx'
var_export($msg,true); //不輸出,只返回 'xxx'
  • 動態生成.php文件
$msg = 'nihao';
$content = '<?php'.PHP_EOL;
$content.= '$a ='.var_export($msg,true).';'.PHP_EOL;
$content.= 'echo $a;'.PHP_EOL;
$content.= '?>';
file_put_contents('./test.php',$content);

include與request 內外調用用法

包含進來的文件,其實與原文件至關合並
一、外面文件能夠訪問裏面文件定義的變量(在include以後定義的變量)
二、裏面文件能夠訪問外面文件在include以前定義的變量
相關文章
相關標籤/搜索