嗨,我有一个课程,但它是如何工作我不理解它。看下面的代码......
<?php
class Ford
{
public $founder = "Henry Ford";
public $headquarters = "Detroit";
public $employees = 164000;
public function produces($car)
{
return $car-> producer == $this;
}
}
class Car
{
public $color;
public $producer;
}
$ford = new Ford();
$car = new Car();
$car-> color = "Blue";
$car-> producer = $ford;
echo $ford-> produces($car);
echo $ford-> founder;
?>
请有人帮助我实际上我的代码中发生了什么..它打印“1Henry Ford” 什么是“返回$ car-&gt; producer == $ this;” ?
我不明白这一点。我希望对此代码中的每个部分都有所了解。
答案 0 :(得分:3)
您将Ford实例$ford
设置为$car
的“生产者”。
然后您将$car
传递给$ford
,并询问
$car->producer == $this; //did you produce this car? True or False
$car->producer
和$this
都引用相同的对象,因此答案是正确的。
答案 1 :(得分:0)
好吧,让我们一步一步来......
class Ford {
public $founder = "Henry Ford",
$headquarters = "Detroit",
$employees = 164000;
}
所以这里有一个福特班,其中已经定义了3个公共变量。
然后,在您的班级福特内部,您有一个名为produce的功能。
public function produces($car) {
return $car->producer == $this;
}
这将返回1 ...我们很快就会得到它。
另一个类,nammed Car有2个公共变量,但这次它不等于任何东西。
class Car {
public $color,
$producer;
}
然后,你有
$ford = new Ford();
$car = new Car();
因此,您将福特变量($ ford)设置为福特的实例,将$ car设置为您的班级Car的实例。可以在里面调用它们。
$car->color = "Blue";
$car->producer = $ford;
所以,现在你在$ color和$ producer中定义什么。到目前为止,Everythings工作正常。
然后你有了这个:
$car->color = "Blue";
$car->producer = $ford;
你定义$ color是什么:一个字符串&#39; Blue&#39;而你的$ car-&gt;生产者(变量$ producer)现在是你的班级福特的实例。因为不要忘记它,你已经定义了ford变量中的内容:
$ford = new Ford();
所以当你这样做时
echo $ford->produces($car)
你把$ car = new Car()作为参数 并且你返回$ car-&gt; producer(因为你定义它等于$ ford)等于$ this,这是与$ car-&gt; producer一样的对象...所以答案是肯定的,它给出了你是一个真实的。
然后你有
echo $ford->founder;
它将回应亨利福特的弦,在福特级别中定义为公共变量。 这只是因为你不能说echo $ founder,因为$ founder变量只存在于Ford类中。这完全是关于范围界定的。所以你做$ ford-&gt;创始人;得到变量!
最后,echo $ ford-&gt; produce();和echo $ ford-&gt;创始人;与你在福特课程中调用的不一样。创始人没有()所以它只是一个变量;)
如果您有任何其他问题,请询问。
(哦,是的,对不起,我的脚本没什么变化,只是为了看到更容易的变量。