以上所有答案都是功能正確。
您問「爲什麼」 - 原因是由於編程術語'範圍'。範圍定義了哪些變量是可見的,以及何時可見。您的示例代碼定義了一個類級變量$ helloWorld,並且還定義了一個類參數$ helloWorld。
函數執行時'在作用域'中的唯一變量是作爲參數傳遞的唯一變量。因此,當代碼稍後調用該方法而未向參數分配值時,會嘗試輸出其值(因爲它沒有)。此時該方法不能看到類級變量,因爲它不在範圍內。
的溶液,如上述,是要麼值傳遞給函數的參數,使得其被定義(並且因此不產生誤差)
$saySomething = new saySomething();
$saySomething->sayHelloWorld('Hello world... again');
這將一個值傳遞給類方法,你會在屏幕上看到'Hello world ... again'。
這可能是,也可能不是,你打算做什麼。如果您希望瞭解如何將類級別變量引入範圍,那麼最常見的方法是使用預定義的PHP變量'$ this',該變量允許該方法引用(即「查看」)其他變量和方法班上。變量'$ this'自動地魔術般地始終指向當前類,無論它在哪裏使用。
class saySomething {
var $helloWorld = 'hello world';
function sayHelloWorld($helloWorld)
{
//set myOutput to parameter value (if set), otherwise value of class var
$myOutput = (isset($helloWorld)) ? $helloWorld : $this->helloWorld;
echo $myOutput;
}
}
$saySomething = new saySomething();
$saySomething->sayHelloWorld(); // Outputs 'hello world' from class definition
$saySomething->sayHelloWorld('Hello world... again'); // Outputs 'Hello world... again'
爲sayHelloWorld() – 2011-02-13 07:05:01