2017-02-03 69 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__ - 它会起作用。 –

相关问题