質問
私たちが知っているように、以下のコードのように、JavaScriptでの匿名オブジェクトの作成は簡単です。
var object = {
p : "value",
p1 : [ "john", "johnny" ] } ;
alert(object.p1[1]) ;
.
出力:
an alert is raised with value "johnny"
.
PHPの場合と同じ手法を適用できますか?PHPで匿名オブジェクトを作成できますか?
解決
それは数年でしたが、私は情報を最新のものに保つ必要があると思います!
PHP-7では、匿名クラスを作成することができますので、このようなものをすることができます。
<?php
class Foo {}
$child = new class extends Foo {};
var_dump($child instanceof Foo); // true
?>
.
これについてもっと読むことができます(承認されています): https://wiki.php.net/rfc/anonymous_classes
しかし、私はそれがJavScriptにどの程度も実装されているかわからないので、JavaScriptとPHPの匿名クラス間のいくつかの違いかもしれません。
編集:
投稿されたコメントからのように、これはマニュアルへのリンクです。 http:// php。ネット/マニュアル/ en / language.oop5.anonymous.php
他のヒント
「匿名」は、オブジェクトについて話すときの正しい用語ではありません。 「匿名の type 」と言うのが良いでしょうが、これはPHPには適用されません。
PHPのすべてのオブジェクトにはクラスがあります。 "default"クラスは stdClass
で、この方法で作成することができます。 :
.
$obj = new stdClass;
$obj->aProperty = 'value';
を利用することもできます。より便利な構文のためのアレイをオブジェクトにアレイをキャストする:
.
$obj = (object)array('aProperty' => 'value');
print_r($obj);
しかし、オブジェクトにアレイをキャストすることは、無効なPHP変数名ではないアレイキーの「興味深い」結果を生み出す可能性がよく、例えばこれがキーの答えが数字で始まるのかを示す私の答え。
はい、可能です!この単純な
もちろん、このオブジェクトはAnObj
クラスのインスタンスであるため、実際には匿名ではありませんが、JavaScriptのようにその場でメソッドを定義することができます。
最近まで、これが私がその場でオブジェクトを作成した方法です。 ジェネラコディセタグプレ
次に: ジェネラコディセタグプレ
しかし今私は一緒に行きます: ジェネラコディセタグプレ
その後: ジェネラコディセタグプレ
もちろん、プロパティと値をすでに知っている場合は、前述のように内部で設定できます: ジェネラコディセタグプレ
注意:これがどのバージョンのPHPで動作するかわからないので、注意する必要があります。しかし、最初のアプローチ(構築時に設定するプロパティがない場合も短い)は、json_encode / json_decode を持つすべてのバージョンで機能するはずです。
JavaScriptを模倣したい場合は、クラスObject
を作成して、同じ動作を得ることができます。もちろん、これはもう完全に匿名ではありませんが、機能します。
ジェネラコディセタグプレ
これにより、要素2 が出力されます。これは、 PHPに関するコメント:クラスとオブジェクトから盗まれました。
配列をオブジェクトに変換します: ジェネラコディセタグプレ
プロパティに値を設定していないときに、未定義のプロパティの警告を受け取らずに、動的プロパティを使用してオブジェクト(javascriptなど)を作成する場合 ジェネラコディセタグプレ
PHPの場合、これと同じ手法を適用できますか?
いいえ-javascriptはプロトタイプ/オブジェクトの直接宣言を使用するため-PHP(および他の多くのオブジェクト指向言語)では、オブジェクトはクラスからのみ作成できます。
つまり、質問は次のようになります。匿名クラスを作成できますか。
繰り返しますが、答えはノーです。クラスを参照できずに、どのようにクラスをインスタンス化しますか?
再帰オブジェクトが必要な場合: ジェネラコディセタグプレ
PHPのドキュメントから、さらにいくつかの例: ジェネラコディセタグプレ
$ obj1と$ obj3は同じタイプですが、$ obj1!== $ obj3です。また、3つすべてが単純なJSオブジェクト{}にjson_encode()します: ジェネラコディセタグプレ
出力: ジェネラコディセタグプレ