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

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

在 php 類中的對象中調(diào)用方法

在 php 類中的對象中調(diào)用方法

PHP
不負(fù)相思意 2022-01-14 17:18:44
我需要調(diào)用一個對象內(nèi)部、類內(nèi)部的函數(shù)。當(dāng)然,對于“On The Fly”類方法,我可以使用 __call 和 __set 魔法來調(diào)用它,但在這種情況下不能。下面是這種情況的示例。class mainclass{public    $v1    = "Hello";public    $fn    = null;function    __construct( )    {    $this->fn    = (object) [ "fn1"   => null,                              "fn2"   => null,                              ];    }public  function __call( $name, array $args )    {    return  call_user_func_array( $this->$name, $args );    }public    function  fn3()    {    echo    "This of course works! <br />";    }}$main = new mainclass();$main->fn4  = function()    {    echo    "Even this works! <br />";      };$main->fn->fn1  = function()    {    echo    $this->v1 . " World :)";    };$main->fn3(); // This of course works!$main->fn4(); // Even this works!$main->fn->fn1(); //Call to undefined method stdClass::fn1() 有可能以這種方式調(diào)用函數(shù)“f1”: $main->fn->fn1() ?如果沒有,有沒有大刀闊斧的建議?不幸的是,這不是 JavaScript 并且不喜歡處理此類的方式,但我必須嘗試一下
查看完整描述

3 回答

?
米琪卡哇伊

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個贊

對于這種情況,我唯一且簡單的解決方法是更改匿名類中的對象。在此過程中,您必須使用類似的變量名稱“$_this”將主類的范圍存儲在內(nèi)部匿名類上。


class mainclass

{

public    $v1    = "Hello";

public    $fn    = null;



function    __construct( )

    {

    $this->fn    = new class( $this)

        {

        public $_this = null;

        public function __construct( $mainscope )

            {

            $this->_this =  &$mainscope;

            }


        public function __call( $method, array $args )

            {

            if  ( isset( $this->{ $method } )  )

                {

                return  call_user_func_array( $this->$method, $args );

                }

            elseif ( isset( $this->_this->{ $name } ) )

                {

                return call_user_func_array( $this->_this->{ $name }, $args);

                }

            }


        public function __set( $name, $value )

            {

            $this->{ $name } = is_callable( $value ) ? $value->bindTo( $this, $this ) : $value;

            }

        };

    }


public  function __call( $method, array $args )

    {

    return  call_user_func_array( $this->{ $method }, $args );

    }


public  function __set( $name, $value )

    {

    $this->{ $name }    = is_callable( $value ) ? $value->bindTo( $this, $this ) : $value;

    }


public    function  fn3()

    {

    echo    "This of course works! <br />";

    }

}



$main = new mainclass();


$main->fn4  = function()

    {

    echo    "Even this works! <br />";  

    };


$main->fn->fn1  = function()

    {

    echo    $this->_this->v1 . " World :)";

    };



$main->fn3(); // This of course works!

$main->fn4(); // Even this works!

$main->fn->fn1(); //Hello World :)

事實(shí)證明,它不是很丑陋,也可以管理。無論如何,這是目前唯一的選擇。


查看完整回答
反對 回復(fù) 2022-01-14
?
忽然笑

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個贊

($main->fn->fn1)();應(yīng)該工作。但是,您不能$this在匿名函數(shù)中訪問


查看完整回答
反對 回復(fù) 2022-01-14
?
拉莫斯之舞

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個贊

$main->fn->fn1();

fn1是一個屬性嘗試使用$main->fn.


查看完整回答
反對 回復(fù) 2022-01-14
  • 3 回答
  • 0 關(guān)注
  • 245 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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