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

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

無(wú)法解析基本語(yǔ)法的解決方法

無(wú)法解析基本語(yǔ)法的解決方法

PHP
繁華開(kāi)滿天機(jī) 2020-02-03 12:43:38
我想要一個(gè)類屬性,該表達(dá)式允許在等號(hào)的右側(cè)進(jìn)行表達(dá)式。所有版本的PHP都會(huì)阻塞以下代碼,但這種編寫(xiě)方式是為了將來(lái)更容易擴(kuò)展。/* Example SDK Class */class SDK{    /* Runtime Option Flags */    // Strings    #  0: Makes no change to the strings.    var $STRING_NONE        = (1 << 0);    #  1: Removes color codes from the string.    var $STRING_STRIP_COLOR = (1 << 1);    #  2: Removes language codes from the string.    var $STRING_STRIP_LANG  = (1 << 2);    #  3: Removes all formatting from the string.    var $STRING_STRIP       = SELF::STRING_STRIP_COLOR & SELF::STRING_STRIP_LANG;    #  4: Converts color codes to HTML & UTF-8.    var $STRING_HTML        = (1 << 3);    #  8: Converts color codes to ECMA-48 escape color codes & UTF-8.    var $STRING_CONSOLE     = (1 << 4);    # 16: Changes player names only.    var $STRING_NAMES       = (1 << 5);    # 32: Changes host names only.    var $STRING_HOSTS       = (1 << 6);    function SDK($fString = SELF::STRING_HTML & SELF::STRING_NAMES & SELF_HOST)    {        // constructor code.    }}$SDK &= new SDK(SDK::STRING_NONE);(1 << 0)對(duì)我來(lái)說(shuō),這似乎是非?;镜恼Z(yǔ)法,并且為什么PHP不允許這樣的事情是不可理解的。誰(shuí)能想到可以保持以下代碼的可讀性和將來(lái)可擴(kuò)展性的解決方法?
查看完整描述

3 回答

?
隔江千里

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

在PHP中聲明類常量或?qū)傩詴r(shí),只能為默認(rèn)值指定原始值。因此,例如,該類聲明將不起作用:


class TEST {

 const ABC = 2 * 4;

 const DEF = some_function();

 static $GHI = array(

   'key'=> 5 * 3,

 );

}

但是該類聲明將:


class TEST {

 const ABC = 8;

 static $GHI = 15;

}

這些規(guī)則適用于類常量/屬性的默認(rèn)值 -您始終可以使用表達(dá)式的結(jié)果初始化其他變量:


$a= array(

 'a'=> 1 * 2,

 'b'=> 2 * 2,

 'c'=> 3 * 2,

);

此類聲明行為的原因如下:表達(dá)式就像動(dòng)詞。他們做某事。類就像名詞:它們聲明某些東西。聲明性聲明絕不應(yīng)該產(chǎn)生動(dòng)作聲明的副作用。需要原始默認(rèn)值將強(qiáng)制執(zhí)行此規(guī)則。


考慮到這一點(diǎn),我們可以按以下方式重構(gòu)原始類:


class SDK

{


    static protected $_types= null;


    static public function getType($type_name) {

        self::_init_types();

        if (array_key_exists($type_name, self::$_types)) {

            return self::$_types[$type_name];

        } else {

            throw new Exception("unknown type $type_name");

        }

    }


    static protected function _init_types() {

        if (!is_array(self::$_types)) {

            self::$_types= array(

                'STRING_NONE'=> 1 << 0,

                // ... rest of the "constants" here

                'STRING_HOSTS'=> 1 << 6

            );

        }

    }


    function __construct($fString = null) {

        if (is_null($fString)) {

            $fString= self::getType('STRING_NONE') & self::getType('STRING_HOSTS');

        }

        var_dump($fString);

    }


}


$SDK &= new SDK(SDK::getType('STRING_HOSTS')); 


查看完整回答
反對(duì) 回復(fù) 2020-02-03
?
萬(wàn)千封印

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

PHP類屬性能不能在它的聲明中表達(dá)。


[...]該聲明可以包括一個(gè)初始化,但是此初始化必須是一個(gè)常量值-也就是說(shuō),它必須能夠在編譯時(shí)進(jìn)行評(píng)估,并且必須不依賴于運(yùn)行時(shí)信息才能進(jìn)行評(píng)估。[...]


資料來(lái)源:PHP手冊(cè):屬性


以下代碼可以正常工作,因?yàn)樗男畔⒖梢栽诰幾g時(shí)確定,并且不需要編譯器在其他任何地方查找,執(zhí)行任何數(shù)學(xué)或字符串函數(shù)來(lái)獲取信息。


class goodExample

{

    // These are OK.

    var $Var = 1;

    const consts = 'I\'m a Constant Property of the class goodExample.';

    static $static = array(FALSE, TRUE);

}

另一方面,以下內(nèi)容無(wú)效,因?yàn)楸仨毥馕銎渲挡拍塬@得其真實(shí)值。這一點(diǎn)在PHP中根本無(wú)效。在var $Var需要數(shù)學(xué)運(yùn)算。該const consts要求concations和varable仰望得到它的價(jià)值,這樣的兩個(gè)原因一個(gè)是行不通的。最后,該static屬性還$static需要進(jìn)行兩次數(shù)學(xué)運(yùn)算才能獲得其真實(shí)值。


class badExample

{

    // These are NOT OK.

    var $Var = 1 + 1;

    const consts = "I'm a constant property of the class " . __CLASS__ . '.';

    static $static = array((1 << 0), (1 << 2));

}

Consts和Static關(guān)鍵字

聲明這些屬性后,它們的值將無(wú)法更改。


const

[...]常量與普通變量的不同之處在于,您不使用$符號(hào)來(lái)聲明或使用它們。


該值必須是一個(gè)常量表達(dá)式,而不是(例如)變量,屬性,數(shù)學(xué)運(yùn)算結(jié)果或函數(shù)調(diào)用。


接口也可以具有常量。


資料來(lái)源:PHP手冊(cè):類常量


static

[...]將類屬性或方法聲明為靜態(tài)可以使它們無(wú)需類的實(shí)例化即可訪問(wèn)。實(shí)例化的類對(duì)象無(wú)法訪問(wèn)聲明為static的屬性(盡管可以使用static方法)。


資料來(lái)源:PHP手冊(cè):靜態(tài)關(guān)鍵字


Static 可以在類外部使用,只要您引用類名稱即可。


查看完整回答
反對(duì) 回復(fù) 2020-02-03
?
鳳凰求蠱

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

PHP之所以能夠做到(1 << 0)這一點(diǎn),僅僅是因?yàn)槟谑褂?code>var時(shí)應(yīng)該使用const。另外,這樣做self::VARIABLE是針對(duì)靜態(tài)變量的,我相信應(yīng)該這樣做self::$variable(除非您將它們定義為const


查看完整回答
反對(duì) 回復(fù) 2020-02-03
  • 3 回答
  • 0 關(guān)注
  • 603 瀏覽

添加回答

舉報(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)