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

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

在PHP中動(dòng)態(tài)更改屬性

在PHP中動(dòng)態(tài)更改屬性

PHP
慕哥6287543 2021-05-13 21:27:23
我對OOP有一些抽象的知識,但這是我第一次嘗試用PHP編寫一些OOP。我想創(chuàng)建一個(gè)類,該類將具有一些來自構(gòu)造的屬性,但有些屬性會動(dòng)態(tài)變化。我對所有的術(shù)語(對象,類,方法等)有些困惑,所以我不知道確切要搜索什么。我在下面做了一個(gè)簡化的例子。這是我聲明我的類的地方,它將在構(gòu)造中接受2個(gè)參數(shù)并計(jì)算第三個(gè)參數(shù),即較高的數(shù)字(請忽略我不檢查類型)。class test{  public function __construct($p1, $p2){    $this->p1 = $p1;    $this->p2 = $p2;    $this->p_max = max(array($this->p1, $this->p2));  }}然后,我初始化對象并檢查p_max:$test = new test(1,2);echo $test->p_max; // Prints 2但是,如果我更改p1和p2,則p_max不會更改:$test->p1 = 3;$test->p2 = 4;echo $test->p_max; // Prints 2 (I want 4)我應(yīng)該如何在類中定義p_max以在每次更改p1或p2時(shí)進(jìn)行更新?有沒有一種方法可以不將p_max轉(zhuǎn)換為方法?
查看完整描述

2 回答

?
溫溫醬

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

__get如果訪問了一個(gè)類的屬性但未定義,則可以使用magic方法實(shí)現(xiàn)此目的,該方法將被調(diào)用。在我看來,這是很棘手的,但是可以按照您的意愿來工作。


<?php

class test {

    public function __construct($p1, $p2) {

        $this->p1 = $p1;

        $this->p2 = $p2;

    }


    public function __get($name) {

        if ('p_max' === $name) {

            return max(array($this->p1, $this->p2));

        }

    }

}


$test = new test(1,2);

echo $test->p_max; // Prints 2


$test->p1 = 3;

$test->p2 = 4;

echo $test->p_max; // Prints 4

這樣,每次訪問此屬性時(shí),都會計(jì)算出最大值。


編輯:因?yàn)開_get方法將僅針對屬性(在類本身中未定義)調(diào)用,所以如果在構(gòu)造函數(shù)中為變量分配值或?qū)⑵鋭?chuàng)建為屬性,則此方法將無效。


Edit2:我想再次指出-用這種方法很難做。為了獲得更清潔的方式,請遵循AbraCadaver的答案。這也是我個(gè)人的做法。


查看完整回答
反對 回復(fù) 2021-05-28
?
交互式愛情

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

您實(shí)際上并不需要使用魔術(shù)方法,只需使用一種返回計(jì)算值的方法即可:


class test{

  public function __construct($p1, $p2){

    $this->p1 = $p1;

    $this->p2 = $p2;

  }    


  public function p_max() {

    return max($this->p1, $this->p2);

  }

}


$test->p1 = 3;

$test->p2 = 4;

echo $test->p_max(); // call method

您還可以接受可選參數(shù)來p_max()設(shè)置新值并返回計(jì)算出的值:


class test{

  public function __construct($p1, $p2){

    $this->p1 = $p1;

    $this->p2 = $p2;

  }    


  public function p_max($p1=null, $p2=null) {

    $this->p1 = $p1 ?? $this->p1;

    $this->p2 = $p2 ?? $this->p2;


    return max($this->p1, $this->p2);

  }

}


echo $test->p_max(3, 4); // call method

還要注意,它max接受多個(gè)參數(shù),因此您不必指定數(shù)組。


查看完整回答
反對 回復(fù) 2021-05-28
  • 2 回答
  • 0 關(guān)注
  • 216 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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