PHP OOP混乱

时间:2014-06-01 19:00:16

标签: php oop

嗨,我有一个课程,但它是如何工作我不理解它。看下面的代码......

<?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;” ?

我不明白这一点。我希望对此代码中的每个部分都有所了解。

2 个答案:

答案 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;创始人;与你在福特课程中调用的不一样。创始人没有()所以它只是一个变量;)

如果您有任何其他问题,请询问。

(哦,是的,对不起,我的脚本没什么变化,只是为了看到更容易的变量。