web-dev-qa-db-ja.com

PHPはオブジェクトの短縮構文を備えていますか?

Javascriptでは、次のようにオブジェクトと配列を簡単に作成できます。

var aObject = { foo:'bla', bar:2 };
var anArray = ['foo', 'bar', 2];

PHPでも同様のことが可能ですか?
array関数を使用して配列を簡単に作成できることを知っています。これは、javascript構文よりも手間がかかることはほとんどありませんが、オブジェクトを作成するための同様の構文はありますか?または、連想配列を使用する必要がありますか?

$anArray = array('foo', 'bar', 2);
$anObjectLikeAssociativeArray = array('foo'=>'bla',
                                      'bar'=>2);

要約すると:
PHPにはオブジェクト作成のようなJavaScriptがありますか、それとも連想配列を使用する必要がありますか?

36
Pim Jager

単純なオブジェクトの場合、連想配列構文とキャストを使用してオブジェクトを取得できます。

<?php
$obj = (object)array('foo' => 'bar');
echo $obj->foo; // yields "bar"

しかし、それを見ると、それがどれほど役に立たないかが簡単にわかります(構造がそれほど単純な場合は、連想配列のままにしておきます)。

47
Crescent Fresh

この配列構文を実装するための提案 がありました。 しかし、それは断られました。


Update配列の短縮された構文が再検討され、受け入れられ、現在は PHP 5.4

しかし、オブジェクトの省略形はまだありません。おそらく、objectに明示的にキャストする必要があります。

$obj = (object) ['foo'=>'bla', 'bar'=>2];
43
Gumbo

PHP 5.4以降、次のことができます。

$array = ['foo'=>'bla', 'bar'=>2];

それほど短くはありませんが、ハードコードされたネストされた配列を多数使用する必要がある場合は、それを高く評価します(これはまったく珍しいことではありません)。

オブジェクトが必要な場合でも、各配列をキャストする必要があります。

$object = (object) ['foo'=>'bla', 'bar'=>2];
10
Matthew

新しいPHP構文によると、

使用できます

$array = [1,2,3];

そして連想配列の場合

$array = ['name'=>'Sanket','age'=>22];

オブジェクトの場合、配列をオブジェクトにタイプキャストできます

$object = (object)['name'=>'Sanket','age'=>22];
7
Sanket Sahu

PHPにはオブジェクトの省略形はありませんが、 json_encode および json_decode 関数を使用すれば、Javascriptの正確な構文を使用できます。

3
Justin Poliey

Crescentfreshによって提供されるメソッドは非常にうまく機能しますが、オブジェクトにさらにプロパティを追加する際に問題が発生しました。この問題を回避するために、splArrayObjectを実装しました。

class ObjectParameter extends ArrayObject  {
     public function  __set($name,  $value) {
        $this->$name = $value;
    }

    public function  __get($name) {
      return $this[$name];
    }
}

//creating a new Array object
$objParam = new ObjectParameter;
//adding properties
$objParam->strName = "foo";
//print name
printf($objParam->strName);
//add another property
$objParam->strUser = "bar";

配列からでもオブジェクトを簡単に作成できるようにするために、このアプローチでできることはたくさんあります。これが役立つことを願っています。

2
Ronald Conco

Json_decodeのアイデアのように、これを書きました:

function a($json) {
 return json_decode($json, true); //turn true to false to use objets instead of associative arrays
}

//EXAMPLE
$cat = 'meow';

$array = a('{"value1":"Tester", 
  "value2":"'.$cat.'", 
  "value3":{"valueX":"Hi"}}');

print_r($array);
1
James Hornitzky