类在没有声明变量的情况下工作?

时间:2012-04-06 11:20:07

标签: php oop

我学习php作为功能和程序语言。现在尝试开始学习以客观为导向,并得到一个重要的问题。

我有代码:

class car {

    function set_car($model) {
        $this->model = $model;
    }

    function check_model()
    {
        if($this->model == "Mercedes") echo "Good car";
    }

}

$mycar = new car;
$mycar->set_car("Mercedes");

echo $mycar->check_model();

为什么没有声明$ model会有效呢?

var $model;在开头?

因为在php中为任何变量工作“自动声明”? 我被困了

6 个答案:

答案 0 :(得分:4)

PHP中的每个对象都可以让成员不用声明它们:

$mycar = new car;
$mycar->model = "Mercedes";
echo $mycar->check_model(); # Good car

这是PHP的默认行为。这些是公开的。请参阅manual

答案 1 :(得分:3)

是的,如果它不存在,PHP会立即为您声明。

无论如何定义它更优雅,并且在使用扩展时建议使用,因为如果你的扩展将使用相同的varnames并且也没有将其定义为private,protected或public,那么你可能会遇到奇怪的情况。 p>

更多信息: http://www.php.net/manual/en/language.oop5.visibility.php

答案 2 :(得分:3)

可以随时创建PHP类成员。通过这种方式,它将被视为公共变量。要声明私有变量,您需要声明它。

答案 3 :(得分:1)

不,这是因为$ model是函数set_car的参数。参数不是变量,而是在调用函数(或类方法)时将设置的变量或值的占位符(引用)。例如,$ model在调用set_car时采用值“Mercedes”。

答案 4 :(得分:1)

是。但这种变量将是公开的。声明类变量为“var”已弃用 - 使用public,protected或private。

答案 5 :(得分:0)

我认为这种行为会导致错误。 让我们考虑一下这个错误印刷的代码

message.author.displayAvatarURL

即使我使用 PHP 7.4+ 类型提示等等,编译器和带有代码检查器的 IDE 都找不到这个错字。