第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

PHP # 通過引用訪問類的受保護(hù)或私有變量是有意還是錯(cuò)誤?

PHP # 通過引用訪問類的受保護(hù)或私有變量是有意還是錯(cuò)誤?

PHP
函數(shù)式編程 2023-10-21 16:11:39
解釋在研究過程中,我創(chuàng)建了下面這個(gè)小代碼片段,以更好地了解 php。我現(xiàn)在創(chuàng)建這個(gè)問題的原因是為了接觸更有經(jīng)驗(yàn)的開發(fā)人員,以免過多地阻塞系統(tǒng),并且不要讓系統(tǒng)變得更進(jìn)一步。下面是有關(guān)如何訪問類范圍之外的私有或受保護(hù)變量的代碼示例。代碼示例此代碼示例將設(shè)置為對(duì)類內(nèi)部$TestVar私有變量的引用。test::Atest<?phpclass Test {    private $A = 123;        public function changeA ($Var){        $this->A = $Var;    }        public function createReference(){        return([&$this->A]);    }}$TestClass = new Test();$TestVar = &$TestClass->createReference()[0];通過使用Test::changeA()或改變$TestVar的內(nèi)容test::A可以被改變。//Test Current Valuevar_dump($TestVar);//Change test::A the intended way$TestClass->changeA(321);var_dump($TestVar);//Change it by reference$TestVar = 777;var_dump($TestVar);var_dump($TestClass);預(yù)期輸出:int 123int 321int 777object(Test)[1]  private 'A' => int 777結(jié)果為什么我認(rèn)為這是一個(gè)錯(cuò)誤,手冊(cè)在描述和示例中都指出:聲明為 protected 的成員只能在類本身內(nèi)部以及通過繼承類和父類訪問。聲明為私有的成員只能由定義該成員的類訪問。這是不可能的或有意的。這是一個(gè)錯(cuò)誤、一個(gè)錯(cuò)誤的文檔還是只是一個(gè)必須忍受的錯(cuò)誤。
查看完整描述

1 回答

?
烙印99

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊

這種行為是完全正常的。事實(shí)上,如果您的屬性是對(duì)象(始終通過引用傳遞),您甚至不需要顯式創(chuàng)建引用:


class Foo

{

    private Datetime $when;


    public function __construct()

    {

        $this->when = new DateTime('1950-12-31');

    }


    public function getWhen(): DateTime

    {

        return $this->when;

    }

}


$f = new Foo();

$w = $f->getWhen();

$w->modify('+50 years');

var_dump($w, $f);

object(DateTime)#2 (3) {

  ["date"]=>

  string(26) "2000-12-31 00:00:00.000000"

  ["timezone_type"]=>

  int(3)

  ["timezone"]=>

  string(13) "Europe/Madrid"

}

object(Foo)#1 (1) {

  ["when":"Foo":private]=>

  object(DateTime)#2 (3) {

    ["date"]=>

    string(26) "2000-12-31 00:00:00.000000"

    ["timezone_type"]=>

    int(3)

    ["timezone"]=>

    string(13) "Europe/Madrid"

  }

}

這與您引用的文檔并不矛盾。該屬性本身無法訪問:


$f->when;

// PHP Fatal error:  Uncaught Error: Cannot access private property Foo::$when

參考文獻(xiàn)是一種不同的語言功能。也許通過另一個(gè)例子更容易理解:


function a(){

    $local_variable = 1;

    b($local_variable);

    echo "b modified a's local variable: $local_variable\n";

}


function b(&$number)

{

    echo "b can read a's local variable: $number\n";

    $number++;

}


a();

b can read a's local variable: 1

b modified a's local variable: 2


查看完整回答
反對(duì) 回復(fù) 2023-10-21
  • 1 回答
  • 0 關(guān)注
  • 115 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)