在 PHP 物件導向程式設計中,訪問控制透過 public、protected、private 三個關鍵字實現,決定類成員(屬性與方法)的可見範圍:
<?php
class Foo {
private $name = 'hdj';
public function getName() {
return $this->name;
}
}
class Bar extends Foo {
public $name = 'deeka';
}
$bar = new Bar();
var_dump($bar->name); // 輸出: string(5) "deeka" (子類公有屬性)
var_dump($bar->getName()); // 輸出: string(3) "hdj" (父類私有屬性)
此例展示:Bar 類繼承 Foo 並定義同名公有屬性 $name。直接訪問 $bar->name 獲取的是子類屬性;而呼叫繼承而來的 getName() 方法時,因方法定義於父類,故存取的是父類私有屬性。這證明私有成員不參與繼承,子類無法直接覆寫。
PHP 中 &&(邏輯 AND)優先級高於 ||(邏輯 OR),且均具備短路求值特性。在條件判斷中混用賦值運算符 = 易導致非預期結果。
<?php
$a = 3; $b = 6;
if ($a = 5 || $b = 7) {
// 實際解析為: $a = (5 || ($b = 7))
// 5 為真,短路,$b 不賦值
echo $b . '<br />'; // 輸出 6
$a++; $b++;
}
var_dump($a, $b); // $a=1 (true轉int), $b=7
echo '<br /> $a = (5 || $b = 7)';
<?php
$a = 3; $b = 6; $c = 1;
if ($a = 5 || $b = 7 && $c = 10) {
// 解析: $a = (5 || (($b = 7) && ($c = 10)))
// 5 為真,短路,後續賦值均不執行
$a++; $b++;
}
var_dump($a, $b, $c); // $a=1, $b=6, $c=1
echo '<br /> && 比 || 高';
<?php
$a = 3; $b = 6; $c = 1;
if ($a = 0 || $b = 7 && $c = 10) {
// 解析: $a = (0 || (($b = 7) && ($c = 10)))
// 0 為假,繼續執行 && 邏輯,$b=7,$c=10 皆為真
$a++; $b++;
}
var_dump($a, $b, $c); // $a=1, $b=8, $c=10
=== 比較或先賦值再判斷。private 成員不參與繼承,子類同名屬性屬遮蔽而非覆寫。