2017-07-28 29 views
1

我碰到this question其特點如下代碼塊:PHP變量無關聯坐在代碼無所事事

<?php 
    class Goat{ 
    public $goat_id; 
    public $goat_name; 
    public $hashed_password; 
    .... 
    public static function authenticate($username, $password){ 

     $is_auth; // This line 
     if(!empty($result)){ 
      $user = array_shift($result); 
      $is_auth = Pass_auth::verify_password($password, $user- >hashed_password); 
     } 

     if($is_auth) { 
      return $user; 
     } 

    .... 
    } 
} 

我的問題來自於身份驗證函數內的標記線。這個例子不是特別的 - 但是一般來說 - 這個$is_auth;聲明有什麼意義,只是坐在那裏什麼都不做?

我明顯地試圖找到一個答案之前張貼在這裏,但如果這種佈局/行爲有一個特定的名字,我不知道它。

我已經取得了一些沙變化和很驚訝地發現,他們沒有產生任何錯誤,下面的代碼是沒有錯誤:

<?php 
    error_reporting(E_ALL); 

    $small = "tree"; 
    //$small = false; //swapping var value types makes no difference. 
    $small; 

    $sdgdfghdgd; 

所以我的問題是:

  • 是什麼這個未關聯的變量用法的名稱?
  • 這有什麼意義嗎?
    • 如果是這樣;什麼?
  • 爲什麼不這樣產生的任何錯誤或警告(我說應該,一定,只是好奇)?
+0

其中一個沒有迴應[我的最新評論](https://stackoverflow.com/questions/45377001/php-why-is-my-class-refusing-to-be-found#comment77716822_45377001)我可能會增加。 (在此評論前20分鐘)。 –

+0

@ Fred-ii-我被這種好奇心完全分散了,我問OP爲什麼那條線(上圖)在那裏,他們也沒有迴應這個詢問。我看不出有什麼意義,但卻發現它好奇,它似乎也沒有產生任何錯誤,所以想知道是否有我現在知道的用法。 。 。 ..。 – Martin

+0

這是任何人的猜測,對於他們所使用的操作系統來說,這很重要;我從來沒有得到任何回報。所以,我就像你一樣黑暗。 –

回答

2
$is_auth; 

是一個完全有效的PHP expression。它的值是$is_auth的值,並沒有任何影響。

PHP編譯器足夠智能,可以檢測到表達式是無用的(因爲它的值沒有使用,也沒有任何副作用),並且它不會產生任何操作碼。

如果它正在生成任何代碼,該代碼應該觸發E_NOTICE,因爲該變量尚未定義。

當表達式涉及數組時,情況發生變化。即使在概念上,表達式$a['foo'];$is_auth;等價,$a['foo'];也沒有被編譯器優化。它會被評估,當$a沒有被定義或者它沒有密鑰'foo'時,它會觸發預期的E_NOTICE

+0

我意識到$ var可以是一個有效的表達式(*我想它相當於'null',因爲沒有任何變化值發生?*),但是,我期望至少有一個'E_NOTICE'它在那裏,不管如果沒有定義它的行爲正在執行。我想你知道沒有任何實際的用法或推理(我想像沒有一個......但是) – Martin

+0

它與'NULL'不同,並且沒有理由觸發'E_NOTICE' if變量被定義。想想'$ x = $ y;'是如何執行的。評估'$ y'的值(只有在未定義'$ y'的情況下才會觸發'E_NOTICE'),然後將值存儲在$ x'中。這裏缺少'$ x ='部分,因此評估'$ y'後表達式的評估應該停止。但似乎PHP足夠聰明(至少在這種情況下),以避免做一個無用的評估。 – axiac