2010-09-20 124 views
4

public function add($ child){ return $ this-> children [] = $ child; }這個PHP函數返回什麼?

順便說一句,這是來自Dagfinn Reiersol在PHP中的摘錄。根據這本書,這會返回$ child,但是不應該在成功分配的情況下返回true,否則返回false?

在此先感謝

回答

9

它返回$child。這是因爲$child首先被添加到數組$this->children[]。然後,返回此分配的結果。

本質上講,它是簡寫:

public function add($child){ 
    $this->children[]=$child; 
    return $child; 
} 

這種快捷的工作,因爲在PHP中,任務是「右結合」:http://www.php.net/manual/en/language.operators.precedence.php

這意味着$a = ($b = 3)實際上是從權評估 - 3被存儲在$b,然後$a。另外,這裏是在頁面上我提供了一個鏈接到一個注:

雖然比= 大多數其他優先級高,PHP仍舊 允許類似 以下表達式:if (!$a = foo()),其中 如果foo()的返回值爲 則爲$a

的更多信息:http://en.wikipedia.org/wiki/Operator_associativity

+0

嗯..好吧..我現在沒有太多時間,但我會多給點思考,然後回來並將其標記爲正確的答案。謝謝。 – 2010-09-20 22:18:44

+0

好的謝謝,我發佈了什麼樣的表達會看起來像不使用快捷方式。 – 2010-09-20 22:21:06

+0

很好的解釋@SimpleCoder。但是,長期解釋需要的是一個完美的例子,說明爲什麼這種簡寫在現實生活中是一個糟糕的想法。希望PHP in Action的作者使用它作爲如何編寫可維護代碼的案例研究。 – 2010-09-20 22:36:40

1

它返回的孩子,因爲分配正義返回任何分配。

成功是否應該返回true是不是一個規則,所以如果是記錄返回子,它是正確的。