【问题标题】:Why does calling a function defined in my class throw an undefined function error?为什么调用我的类中定义的函数会引发未定义的函数错误?
【发布时间】:2017-02-03 18:09:17
【问题描述】:

这是我的代码:

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

【问题讨论】:

  • getDimensions函数确实没有定义。
  • getDimensions()$this-&gt;getDimensions() 不同 - 您可以从静态函数调用。
  • $this ^^^^^^^
  • 首先您需要了解为什么在您的类中同时使用静态和非静态方法。

标签: php oop static


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    $room->getDimensions()
    

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

    【讨论】:

    • 您会感到惊讶,但在 php 中您可以使用:: 调用非静态方法
    • 什么?那么它是如何工作的呢?假设它访问一个非静态变量,并且您有 2 个对象实例。现在该方法访问变量。返回哪个变量?一审还是二审?
    • 我说你可以静态运行非静态方法,但我没有说它总是会成功。如果非静态方法对$this 执行nothing - 它会起作用。
    • 哦,有道理
    • 因为php7 你会收到一个警告。但是在php5中就可以了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    相关资源
    最近更新 更多