2017-02-03 81 views
-2

這是我的代碼:爲什麼調用我的類中定義的函數會引發未定義的函數錯誤?

<?php 
class Render { 
    public $dimensions =array(); 

    public function getDimensions($room) { 
     return $this->dimensions; 
    } 
    public static function displayDimensions($size) { 
     return $size[0] . " x " . $size[1]; 
    } 

    public static function detailsKitchen($room) { 
     return "Kitchen Dimensions: " . Render::displayDimensions(getDimensions($room)); 
    } 
} 
$room = new Render(); 
$room->dimensions[] = (20); 
$room->dimensions[] = (10); 
?> 

這是錯誤:

PHP Fatal error: Uncaught Error: Call to undefined function getDimensions() in index.php:12 Stack trace: #0 6033c6f9-bc53-4bfa-9e1d-a403951652f5.php(176): Render::detailsKitchen(Object(Room)) #1 {main} thrown in index.php on line 12 Fatal error: Uncaught Error: Call to undefined function getDimensions() in index.php:12 Stack trace: #0 6033c6f9-bc53-4bfa-9e1d-a403951652f5.php(176): Render::detailsKitchen(Object(Room)) #1 {main} thrown in index.php on line 12

+1

而'getDimensions'函數確實沒有定義。 –

+3

'getDimensions()'與'$ this-> getDimensions()'不一樣 - 您可以**不從**調用靜態函數。 –

+0

'$ this' ^^^^^^^ – AbraCadaver

回答

0

也許你應該嘗試$room->getDimensions(),而不是調用您的實例作爲參數的方法(你應該相應地改變你的方法) 。

0

在任何語言中,不能從靜態上下文中調用非靜態方法。這就是爲什麼它說它沒有定義。因爲我認爲你的意思做

$room->getDimensions() 

,你應該改變getDimensions(),以$房 - > getDimensions()。

+1

你會驚訝,但在PHP你__can__調用非靜態方法使用'::' –

+0

什麼?那麼它是如何工作的呢?假設它訪問一個非靜態變量,並且有2個對象實例。現在該方法訪問變量。哪個變量返回?第一次還是第二次? – Leonid

+1

我說你__can__靜態運行非靜態方法,但我沒有告訴它它將永遠是成功的。如果一個非靜態方法使用'$ this'來做__nothing__ - 它會起作用。 –

相關問題