2017-02-03 6 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__ запускаете нестатический метод статически, но я не сказал, что он всегда будет успешным. Если нестатический метод делает __nothing__ с '$ this' - он будет работать. –