2011-06-30 10 views
4

オブジェクトを作成するときにオブジェクトフィールドを取得するための短い記法がPHPにあるのだろうかと思います。オブジェクトフィールドを取得するための短縮記法

たとえば、Javaでは、フィールドの1つを取得するために、新しく作成したオブジェクトを変数に配置する必要はありません。 例:今

public class NewClass { 
    public int testNum = 5; 
} 

、新しく作成されたオブジェクトにtestNumフィールドを取得するために私がしなければならないすべては、次のとおりです。

​​

PHPで同様のケースがこれを行うために私を強制するだろうが:

$obj = new NewClass(); 
$num = $obj->testNum; 

1つのステートメントでそれを行う方法はありますか? 注:クラスを編集することはできません。

+1

あなたが示したJavaバージョンはかなり無駄かもしれないように私には思えます。私はJavaのエキスパートではありませんが、コードをスニッフィングしても、基本的にオブジェクトを作成し、オブジェクトのプロパティにアクセスしてオブジェクトを投げ捨てることはできませんでしたか?私の理解は、オブジェクトの作成は、JavaとPHPの両方で高価なので、オブジェクトを作成し、それを離れて投げることは、むしろ無駄だろうか? – GordonM

+0

なぜ値を '$ num'に代入するのですか? '$ obj-> testNum'に既に入っています。コードの多くを表示できるので、なぜ1行を取り除くのにかなりの時間を費やすのか分かりますか? – phant0m

+0

特定のコードはありません。オブジェクトのvarを1つだけ必要とする状況にあることがあります。そのような場合は、2行ではなく1行だけ書く方が便利です。 – MeLight

答えて

2

たぶん、あなたは、静的プロパティのいずれかを探しているに、または定数

public class NewClass { 
    const NUM = 5; 
    public static $num = 5; 
} 
$num = NewClass::NUM; 
$num = NewClass::$num; 

あなたが本当にオブジェクトのメンバが必要な場合は、いいえ、PHPは、現在この機能をサポートしますが、その次の5.4のリリースを予定していません。

+0

変数は静的でも定数でもなく、作成時に設定されていればできません。 – MeLight

+0

パラメータ化可能な関数にコードをラップすることはできますが、**は使用しないでください。 – phant0m

+0

一時変数を使用してアクセスすることができます(あなたの例ではすでに実行していますが、1つのステートメントでは実行していません)。後でコードを読んで理解する予定がある場合は、変数を使用することをお勧めします;)ただし、常に値だけが必要な場合は、静的プロパティまたは定数 – KingCrunch

1

関数/メソッド呼び出しでのみ実行できます。
newは関数ではなく、言語構造です。

2

あなたは、あなたが簡単にでき、コンストラクタを呼び出して、あなたのクラスで関数を作成するラッパーを作成することができます

$num = NewClass::Create()->testNum; 
+0

の代わりにオブジェクトメンバとして実装する必要はありません –

+0

@OZ_:達成しようとしていることに依存します;)これは単にファクトリパターンの実装です。しかし、私はそれが欲しいとは思っていません。 – KingCrunch

+0

@KingCrunchは「悪い」種類の実装の場合のみです。静的メソッドは悪い習慣です。 –

関連する問題