首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 訪問控制與運算符優先級深度解析

     編輯:PHP 綜合知識

類成員訪問控制機制

在 PHP 物件導向程式設計中,訪問控制透過 public、protected、private 三個關鍵字實現,決定類成員(屬性與方法)的可見範圍:

  • 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

最佳實踐建議

  1. 避免在條件判斷中使用賦值,改用 === 比較或先賦值再判斷。
  2. 複雜邏輯善用括號明確優先級,提升可讀性。
  3. 理解 private 成員不參與繼承,子類同名屬性屬遮蔽而非覆寫。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved