3

我将 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 中为任何变量工作“自动声明”?我被困住了

4

6 回答 6

4

PHP 中的每个对象都可以获取成员而无需声明它们:

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

这是 PHP 的默认行为。那些是公开的。见手册

于 2012-04-06T11:25:44.540 回答
3

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

无论如何定义它更优雅,并且在使用扩展时建议使用它,因为如果您的扩展将使用相同的 varnames 并且不将其定义为私有、受保护或公共,您可能会遇到奇怪的情况。

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

于 2012-04-06T11:26:30.827 回答
3

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

于 2012-04-06T11:29:15.507 回答
1

是的。但是这种方式变量将是公开的。并且不推荐使用声明类变量为“var” - 使用公共、受保护或私有。

于 2012-04-06T11:26:28.740 回答
0

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

于 2012-04-06T11:24:05.107 回答
0

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

declare(strict_types=1);

class A
{
    public float $sum;
    public function calcSum(float $a, float $b): float
    {
        $this->sum = $a;
        $this->sums = $a + $b; //misprinted sums instead of sum
        return $this->sum;
    }
}

echo (new A())->calcSum(1, 1); //prints 1

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

于 2021-02-04T21:35:40.693 回答