Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么调用类中定义的函数会引发未定义的函数错误?_Php_Oop_Static - Fatal编程技术网

Php 为什么调用类中定义的函数会引发未定义的函数错误?

Php 为什么调用类中定义的函数会引发未定义的函数错误?,php,oop,static,Php,Oop,Static,这是我的代码: <?php class Render { public $dimensions =array(); public function getDimensions($room) { return $this->dimensions; } public static function displayDimensions($size) { return $size[0] . " x " . $size[1];

这是我的代码:

<?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致命错误:未捕获错误:调用索引中未定义的函数getDimensions()。PHP:12堆栈跟踪:#0 6033c6f9-bc53-4bfa-9e1d-a403951652f5.PHP(176):Render::detailsKitchen(对象(房间))#1{main}在index.PHP的第12行抛出致命错误:未捕获错误:调用未定义的函数getDimensions()在index.php:12堆栈跟踪中:#0 6033c6f9-bc53-4bfa-9e1d-a403951652f5.php(176):Render::detailsKitchen(Object(Room))#1{main}在第12行的index.php中抛出


也许您应该尝试
$room->getDimensions()
,而不是使用实例作为参数调用方法(您应该相应地更改方法)。

在任何语言中,都不能从静态上下文调用非静态方法。这就是为什么它说它没有定义。因为我认为你是有意的

$room->getDimensions()

,您应该将getDimensions()更改为$room->getDimensions()。

getDimensions
函数实际上没有定义。
getDimensions()
$this->getDimensions()不同
-您不能从静态函数调用它。
$this
^^^^^^^首先,您需要了解为什么在类中同时使用静态和非静态方法。您会感到惊讶,但在php中,您可以使用
调用非静态方法什么?那么它是如何工作的呢?假设它访问一个非静态变量,并且您有两个对象实例。现在,该方法访问变量。返回哪些变量?第一个实例还是第二个实例?我说过可以静态运行非静态方法,但我没有说它总是成功的。如果一个非静态方法对
$this
不起任何作用-它会起作用。哦,这是有道理的,因为
php7
你会得到一个警告。但在php5中,它是好的。