【发布时间】:2018-02-26 10:57:03
【问题描述】:
我正在学习PHP OOP,但现在我遇到了一个错误并且对链式方法感到困惑。这是我的代码
<?php
class Car {
public $tank;
public function fill($float) {
$this-> tank += $float;
return $this;
}
public function ride($float) {
$miles = $float;
$gallons = $miles/50;
$this-> tank -= ($gallons);
return $this;
}
}
$bmw = new Car();
$tank = $bmw -> fill(10) -> ride(40);// -> tank;
echo "The number of gallons left in the tank: " . $tank . " gal.";
?>
现在的问题是,当用于调用函数而不调用公共变量 tank 时,它会显示以下错误消息。
可捕获的致命错误:Car 类的对象无法转换为 第 33 行 C:\xampp\htdocs\oop\chain.php 中的字符串
在这种情况下,我为什么要在调用这两个函数时调用公共变量tank?如果我没有直接为公共变量tank 分配任何值,那么我为什么要调用该变量..??
我对此很困惑
【问题讨论】:
-
您的
ride()方法返回自身,因此$tank是对$bmw对象的引用。 -
你可以使用魔术方法
__toString,看看php.net/manual/en/language.oop5.magic.php#object.tostring -
你已经复制了书中的代码,“the-essentials-of-object-oriented-php”。在 Chain Method Lesson 中指出,“为了让我们能够执行链接,方法应该返回对象,并且因为我们在类中,所以方法应该返回 $this 关键字。”您可以使用 __toString(),单独调用或设置 getter 方法。