[英]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.