1. 程式人生 > >PHP易混淆函式的區別

PHP易混淆函式的區別

1.echo()和print()的區別

void echo(string arg1 [, string ...])
Outputs all parameters.

int print( string arg )
Outputs arg. Returns1, always.
print() is not actually a real function (itis a language construct) so you are not required to use parentheses with itsargument list.
-----------------------------------------
echo()和print()的功能基本相同,但是兩者還是有細微差別的。
echo輸出後沒有返回值,但print有返回值,當其執行失敗時返回flase,因此可以作為一個普通函式來使用。


例如執行下面的程式碼後變數$r的值將為1:
$r = print “Hello World”; 
這意味著print可用在一些複雜的表示式中,而echo則不行。


但是,因為echo語句不要求返回任何數值,所以在程式碼中echo的執行效率要略快於print語句。


2.include()和require()、include_once()和require_once()的區別


兩者都是包含並執行指定檔案。
include()產生一個警告,而require()則導致一個致命錯誤(fatal error)。(這句話很關鍵)


換句話說,如果想在遇到丟失檔案時停止處理頁面就用require()。
include()就不是這樣,指令碼會繼續執行。
同時也要確認設定了合適的include_path。
注意在 PHP 4.3.5 之前,包含檔案中的語法錯誤不會導致程式停止,但從此版本之後會。
require_once()和 require()語句類似,唯一區別是如果該檔案中的程式碼已經被包含了,則不會再次包含。


require_once() 應該用於在指令碼執行期間同一個檔案有可能被包含超過一次的情況下,想確保它只被包含一次以避免函式重定義,變數重新賦值等問題。
-----------------------------------------
說的通俗點,include()是有條件包含函式,而require()則是無條件包含函式。就像字面的意思一樣:requre是很強硬的請求、要求的意思。
例如在下面程式碼中,如果變數$a為真,則將包含檔案a.php:
if($a){
include(”a.php”);
}


而require()則和include()不同,不管$a取何值,下面的程式碼將把檔案a.php包含進檔案裡:
if($a){
require(”a.php”);



3.空字串('')和NULL的區別
PHP中空字串和NULL都是以值為0儲存的,但是他們的型別並不一樣。
在以下程式碼中,你會發現他們打印出來的分別是integer,NULL string三種類型。
可見、NULL和0是“等值”但不等型別。
<?php
    echo gettype(0);
    //output "integer"
    echo "<br>";
    echo gettype(NULL);
    //output "NULL"
    echo "<br>";
    echo gettype("");
    //output "string"
    echo "<br>";
    echo gettype('');
    //output "string"
    //‘’and "" is the same type in PHP language.


4.isset()和 empty()的區別
基於第4點,我們繼續討論isset()和empty()的區別。
以下是官方給出的解釋:
----------------------------------------------
bool isset ( mixed var [, mixed var [, ...]] )
如果 var 存在則返回 TRUE,否則返回FALSE。
如果已經使用unset()釋放了一個變數之後,它將不再是 isset()。若使用 isset() 測試一個被設定成 NULL 的變數,將返回 FALSE。
同時要注意的是一個 NULL 位元組("\0")並不等同於 PHP 的 NULL 常數。
警告: isset() 只能用於變數,因為傳遞任何其它引數都將造成解析錯誤。若想檢測常量是否已設定,可使用 defined() 函式
bool empty ( mixed var )
如果 var 是非空或非零的值,則 empty() 返回 FALSE。換句話說,""、0、"0"、NULL、FALSE、array()、var $var; 以及沒有任何屬性的物件都將被認為是空的,如果 var 為空,則返回TRUE。
-----------------------------------------
isset(),顧名思義,是否設值。
對於。emptyI()這裡有一點絕對要注意起來:當一個變數值為0,empty 認為這個變數同等於空,即相當於沒有設定。
比如當我們檢測$id 變數的時候,
<?php
    //define a var
    $id = 0;
    //output "1"
    echo isset($id)."<br>";
    //output "1" each function is return a boolean type
    echo empty($id)."<br>";
    //true
    if (empty($id)) {
    echo '$var is either 0 or not set at all'."<br>";
    }
    //false
    if (!isset($id)) { 
    echo '$var is not set at all'."<br>";
    }
當$id=0 ,用empty和isset來檢測變數$id是否已經配置,兩將返回不同的值:empty 認為沒有配置,isset 則能夠取得 $id 的值,  
6.==(等)和===(恆等)的區別
回顧上面第四條空字串(”")和NULL的區別,再來看一個例子:
<?php
    if(''==NULL){
        echo "true"."<br>";
    }
    if(!(''===NULL)){
        echo "true";
    }
執行之後你會發現列印兩個true!
可見==只是比較值是否相等,而===則不但比較值,還會比較型別,更為嚴格。