2017-03-06 35 views
1

爲什麼這是不可能的:PHP投射到我的

$user = (User) $u[0]; 

但這可能

$bool = (boolean) $res['success']; 

我使用PHP 7.0。

+0

對象鑄造是不安全的。你爲什麼想要這樣做?不確定它是否相關,你可以使用'instanceof'來檢查對象的類。 – Raptor

+0

'$ u [0]'是什麼? –

+1

正如我所知,你只能投出做原始數據類型見[類型轉換] http://php.net/manual/de/language.types.type-juggling.php –

回答

3

據我所知,在PHP中你只能施放某種類型:

(int), (integer) - cast to integer 
(bool), (boolean) - cast to boolean 
(float), (double), (real) - cast to float 
(string) - cast to string 
(binary) - cast to binary string (PHP 6) 
(array) - cast to array 
(object) - cast to object 
(unset) - cast to NULL (PHP 5) 

(見Type Casting

相反,你可以使用instanceof檢查特定類型的:

if($yourvar instanceof YourClass) { 
    //DO something 
} else { 
    throw new Exception('Var is not of type YourClass'); 
} 
0

對象和原始類型是不同的。由於它被稱爲原始類型,它們非常簡單,可能只有1個字節,2個字節或4個字節,最多8個字節。

當我們談論對象時,這個對象可以與其他對象具有不同的屬性。那麼PHP的問題就是,「這個對象是否真的來自我的類​​?」 「如何將此對象轉換爲我的類?」。因此,你不能解析馬上使用

$myObject = (ClassName) $variable 

那麼怎麼投的對象呢?不知道,但通常的做法是這樣的:

  1. 該類
  2. 創建構造函數在類中,做出明確接受某些參數,也許陣列

這裏的方法是樣本:

public class MyAwesomeClass{ 


    function __construct($thisIsArray){ 
     $this->attributeA = $thisIsArray["A"]; 
     $this->attributeB = $thisIsArray["B"]; 
     ...... 
    } 

    static function fromArray($thisIsArray){ 
     return MyAwesomeClass($thisIsArray); 
    } 

} 

$obj = MyAwesomeClass::fromArray($attributes); 
+0

希望PHP會以某種方式提供'''語法。然而,在這種情況發生之前,你需要''obj = MyAwesomeClass :: fromArray($ attributes);'。 –

1

除了爲什麼這是不可能的答案,我建議您編寫一個構建器函數,根據您的輸入創建一個對象。所以它會看起來像

$user = User::buildFromSomeArrayInput($u[0]); 

,然後有一個生成器來創建一個新的User對象,分配權屬性等你可以只是做這一切就地當然,但有一個設計器功能可確保你不會在幾個位置上這樣做,並且你可以設置私有屬性,因爲它是一個類成員函數。讓它神奇地工作是多一點工作,但不是那麼多。 您可能遇到的唯一問題是,當您確實有不同的對象時,不會公開可能需要的所有內部對象。但是這是有原因的,因爲內部可能會改變 - >你不想依賴這個。

這裏有一些黑客提出用序列化來做這件事。我建議遠離他們,因爲他們是黑客,就我而言,他不是很清楚。

0

原因是「假」是一個字符串,它的真實性。但是false是一個布爾值。

$res['success'] = "false"|; 
if ($res['success']) { // returns true 
    // this cose will be executed 
} 

這裏又如:echo "false" == true ? 111 : 222;,打印111

再次,...「42」是一個字符串,而42是一個數字。

您可以隨時檢查變量內容的布爾值。 「PHP不需要(或支持)變量聲明中的顯式類型定義;變量的類型由使用該變量的上下文確定,也就是說,如果將字符串值分配給變量$ var ,$ var變成一個字符串,如果一個整數值被賦值給$ var,它就變成一個整數。「

從文檔又如:

<?php 
$foo = 10; // $foo is an integer 
$bar = (boolean) $foo; // $bar is a boolean 
?> 

看看the type comparison tables