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

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

如何在PHP中永久地類(lèi)型轉(zhuǎn)換類(lèi)屬性?

如何在PHP中永久地類(lèi)型轉(zhuǎn)換類(lèi)屬性?

PHP
暮色呼如 2022-08-05 18:46:40
我一直在閱讀PHP手冊(cè)的“可見(jiàn)性”部分,在第一條評(píng)論中,有人提到:OUTSIDE CODE可以將 Item 屬性轉(zhuǎn)換為任何其他 PHP 類(lèi)型(布爾值、整數(shù)、浮點(diǎn)數(shù)、字符串、數(shù)組和對(duì)象等)——這是另一個(gè)巨大的錯(cuò)誤。請(qǐng)考慮以下示例:class base {    public $foo = 1;}$first = new base();(string)$first->foo; //I thought just this expression would typecastvar_dump($first->foo); //but I found it still is int$first->foo = (string)$first->foo;    var_dump($first->foo); //ok so public props can be typecasted難道只是對(duì)于受保護(hù)的私有屬性,我們不能從外部更改它們的類(lèi)型嗎?或者這是否也適用于公共財(cái)產(chǎn)?
查看完整描述

3 回答

?
LEATH

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

您正在執(zhí)行的操作是用新值覆蓋屬性,該值恰好是不同的類(lèi)型。

類(lèi)型強(qiáng)制轉(zhuǎn)換不會(huì)影響原始變量或值。它將創(chuàng)建一個(gè)類(lèi)型轉(zhuǎn)換類(lèi)型的新值,如果要保留該值,則需要分配該值。

您所要求的內(nèi)容與對(duì)象屬性可見(jiàn)性無(wú)關(guān),而是與理解類(lèi)型轉(zhuǎn)換是一種不影響其操作數(shù)的操作有關(guān)。

這對(duì)以下方面絕對(duì)沒(méi)有任何作用:$string

$string = "123";
(int)$string;

...并且類(lèi)型轉(zhuǎn)換值丟失,因?yàn)槲覀儧](méi)有分配操作的結(jié)果

通過(guò)以下方法,如果滿足幾個(gè)條件,我們可以覆蓋 的值:$class::$someInteger

$class->someInteger = (string) 123;
  1. 該物業(yè)是公共的。(您顯然無(wú)法從類(lèi)外部直接訪問(wèn)或?qū)傩浴D憧梢酝ㄟ^(guò)使用反射或奇怪的東西來(lái)欺騙這個(gè)問(wèn)題,比如有一個(gè) getter 返回對(duì)屬性的引用,但對(duì)于生產(chǎn)代碼來(lái)說(shuō),這兩者都是非常糟糕的主意)。privateprotected

  2. 您沒(méi)有使用 PHP 7.4 類(lèi)型化屬性,并且已為其聲明了類(lèi)型。

這個(gè)問(wèn)題的“永久”部分特別被誤導(dǎo),因?yàn)樵赑HP中,變量通常沒(méi)有類(lèi)型。

您可以將任何類(lèi)型的值賦給任何變量。當(dāng)它們確實(shí)具有類(lèi)型(PHP 7.4類(lèi)型化屬性)時(shí),沒(méi)有實(shí)際的方法可以更改定義的類(lèi)型(再次,可能有一種方法使用反射...但我不會(huì)去那里)。


查看完整回答
反對(duì) 回復(fù) 2022-08-05
?
白豬掌柜的

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

你的問(wèn)題是基于對(duì)術(shù)語(yǔ)類(lèi)型轉(zhuǎn)換含義的誤解。PHP手冊(cè)中關(guān)于類(lèi)型轉(zhuǎn)換的頁(yè)面和整個(gè)手冊(cè)是不夠的,也不是學(xué)習(xí)php語(yǔ)言的獨(dú)立規(guī)范參考。另外,它假設(shè)您了解其他編程語(yǔ)言,例如C。

類(lèi)型轉(zhuǎn)換不定義為變量的數(shù)據(jù)類(lèi)型轉(zhuǎn)換;它是表達(dá)式的數(shù)據(jù)類(lèi)型轉(zhuǎn)換 - 通常,這是在大多數(shù)編程語(yǔ)言中。Wikipedea將其定義如下:

在計(jì)算機(jī)科學(xué)中,類(lèi)型轉(zhuǎn)換、類(lèi)型強(qiáng)制轉(zhuǎn)換、類(lèi)型強(qiáng)制和類(lèi)型雜耍是將表達(dá)式從一種數(shù)據(jù)類(lèi)型更改為另一種數(shù)據(jù)類(lèi)型的不同方法。

官方手冊(cè)使用三個(gè)術(shù)語(yǔ),即類(lèi)型雜耍,類(lèi)型轉(zhuǎn)換類(lèi)型轉(zhuǎn)換。從第一段中可以猜到,類(lèi)型雜耍類(lèi)型轉(zhuǎn)換是一回事。在第一段中,他們說(shuō):

請(qǐng)注意,這不會(huì)更改操作數(shù)本身的類(lèi)型;唯一的變化是操作數(shù)的計(jì)算方式...

應(yīng)該清楚的是,類(lèi)型雜耍絕對(duì)不會(huì)改變變量的類(lèi)型。從php手冊(cè)中可以看出,類(lèi)型雜耍類(lèi)型轉(zhuǎn)換是兩個(gè)不同的概念。問(wèn)題是,由于PHP手冊(cè)從未定義過(guò)這些術(shù)語(yǔ),我們?nèi)绾未_保這兩個(gè)術(shù)語(yǔ)是否相同以及它們的實(shí)際含義。在類(lèi)型鑄造文章中,手冊(cè)說(shuō):

PHP中的類(lèi)型轉(zhuǎn)換的工作方式與在C:...

所以,答案是,我們可以安全地假設(shè)C語(yǔ)言的類(lèi)型轉(zhuǎn)換的定義適用于PHP語(yǔ)言。在C語(yǔ)言中,類(lèi)型轉(zhuǎn)換的定義與維基百科定義相同,即僅轉(zhuǎn)換表達(dá)式的數(shù)據(jù)類(lèi)型。以下摘錄摘自K&R的《The C Programming Language by K&R》一書(shū),第2版,第2.7節(jié),第45頁(yè):

在構(gòu)造中,表達(dá)式被轉(zhuǎn)換為命名類(lèi)型... ...cast的確切含義是,就好像表達(dá)式被分配給特定類(lèi)型的變量一樣......我們可以使用...請(qǐng)注意,強(qiáng)制轉(zhuǎn)換在正確的類(lèi)型中產(chǎn)生n的值,n本身不會(huì)改變。(type-name) expressionsqrt((double) n)

這樣的結(jié)論是,php 中的類(lèi)型轉(zhuǎn)換的工作方式與類(lèi)型雜耍相同,因?yàn)樗僮鞯淖兞浚ú僮鲾?shù))的數(shù)據(jù)類(lèi)型不會(huì)更改。您可以使用該函數(shù)來(lái)轉(zhuǎn)換變量的數(shù)據(jù)類(lèi)型。settype()

正如第一段所指出的,php手冊(cè)的type頁(yè)面在最后一段中給出了以下技術(shù)上錯(cuò)誤的注釋?zhuān)?/p>

要強(qiáng)制將變量轉(zhuǎn)換為特定類(lèi)型,請(qǐng)強(qiáng)制轉(zhuǎn)換該變量或?qū)ζ涫褂?settype() 函數(shù)。

現(xiàn)在,您知道php中的類(lèi)型轉(zhuǎn)換實(shí)際上意味著什么,以及為什么您有這種誤解,最好將您的問(wèn)題改寫(xiě)如下:

改寫(xiě)的問(wèn)題:如何在 PHP 中永久轉(zhuǎn)換類(lèi)屬性的數(shù)據(jù)類(lèi)型。

很明顯,公共屬性將很容易地通過(guò) 轉(zhuǎn)換為不同類(lèi)型的。有趣的是,與用戶yivi的原始答案中提出的建議相反,可以評(píng)估私有受保護(hù)的屬性,并且可以從類(lèi)外轉(zhuǎn)換其類(lèi)型[1][2]。settype($myObj->myPubProp, required-type)

方法 1:使用引用:

class myClass {

    private $prop = 786; //Could be protected too.    


    public function &assess_priv(){

        return $this->prop;        

    }

    public function display_prop() {

        echo var_dump($this->prop);

    } 

}


$obj = new myClass;

$newObjProp = &$obj->assess_priv();

settype($newObjProp, "string");

$obj->display_prop(); //converted the data type of private property of a class  

方法 2: 使用 PHP 屬性重載


error_reporting(E_ALL);


class myClass {

    private $prop = 786; //Could be protected too.    


    public function __set($name, $value)

    {

        $this->$name = $value;

    }


    public function __get($name)

    {

        return $this->$name;

    } 

}


$obj = new myClass;

var_dump($obj->prop);

$obj->prop = (string)$obj->prop; //Interestingly, settype($obj->prop, "string"); can't be used

echo "</br>";

var_dump($obj->prop); //converted the data type of private property of a class 


查看完整回答
反對(duì) 回復(fù) 2022-08-05
?
繁星淼淼

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

類(lèi)型轉(zhuǎn)換類(lèi)屬性現(xiàn)在在 中可用。php7.4


<?php

class User {

    public int $id;

    public string $name;

}

$user = new User;

$user->id = 123; // this will work

$user->id = "hello world"; // throws fatal error


致命錯(cuò)誤: 未捕獲的類(lèi)型錯(cuò)誤: 鍵入的屬性 用戶::$id 必須是 int, 字符串用于 [...][...]:7 堆棧跟蹤: #0 {main} 拋入 [...][...]在7號(hào)線

您需要切換到 .此功能現(xiàn)已在其官方文檔的鏈接中提供php7.47.4

這是在線試用的沙盒鏈接。


查看完整回答
反對(duì) 回復(fù) 2022-08-05
  • 3 回答
  • 0 關(guān)注
  • 194 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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