簡體   English   中英

Class 在不聲明變量的情況下工作?

[英]Class works without declaring variables?

我學習了 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 中,任何變量都可以“自動聲明”? 我卡住了

PHP 中的每個 object 都可以獲得成員 w/o 聲明:

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

這是 PHP 的默認行為。 那些是公開的。 參見手冊

是的,如果它不存在,PHP 會即時為您聲明它。

無論如何定義它更優雅,並且在使用 extends 時推薦它,因為如果你的 extends 將使用相同的 varnames 並且不將其定義為 private,protected 或 public,你可能會遇到奇怪的情況。

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

PHP class 會員可隨時創建。 這樣它將被視為公共變量。 要聲明私有變量,您需要聲明它。

是的。 但是這樣變量將是公開的。 並且將 class 變量聲明為“var”已棄用 - 使用公共、受保護或私有。

不,這是因為 $model 是 function set_car 的參數。 Arguments 不完全是變量,而是在調用 function(或 class 方法)時將設置的變量或值的占位符(引用)。 例如,$model 在調用 set_car 時取值“Mercedes”。

我認為這種行為會導致錯誤。 讓我們考慮一下這個代碼有一個印刷錯誤

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 都找不到這個錯字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM