私はPHPを使用しています。オブジェクトの配列があり、その末尾にオブジェクトを追加したいと考えています。
$myArray[] = null; //adds an element
$myArray[count($myArray) - 1]->name = "my name"; //modifies the element I just added
上記は機能的ですが、それを書くためのよりクリーンで読みやすい方法はありますか? もしかして一行?
ただ行う:
$object = new stdClass();
$object->name = "My name";
$myArray[] = $object;
new
最初にオブジェクト (行) を作成し、それを配列の最後 (行) にプッシュする必要があります[]
。
これを行うこともできます:
$myArray[] = (object) ['name' => 'My name'];
しかし、たとえそれがより簡潔であっても、それはそれほど読みにくいと私は主張します.
オブジェクトは本当に必要ですか?どうですか:
$myArray[] = array("name" => "my name");
2 次元配列を使用するだけです。
出力 (var_dump):
array(1) {
[0]=>
array(1) {
["name"]=>
string(7) "my name"
}
}
次のように最後のエントリにアクセスできます。
echo $myArray[count($myArray) - 1]["name"];
何かのようなもの:
class TestClass {
private $var1;
private $var2;
private function TestClass($var1, $var2){
$this->var1 = $var1;
$this->var2 = $var2;
}
public static function create($var1, $var2){
if (is_numeric($var1)){
return new TestClass($var1, $var2);
}
else return NULL;
}
}
$myArray = array();
$myArray[] = TestClass::create(15, "asdf");
$myArray[] = TestClass::create(20, "asdfa");
$myArray[] = TestClass::create("a", "abcd");
print_r($myArray);
$myArray = array_filter($myArray, function($e){ return !is_null($e);});
print_r($myArray);
この構造が配列よりも好ましい状況があると思います。すべてのチェック ロジックをクラスに移動できます。
ここでは、array_filter $myArrayの呼び出し前に3 つの要素があります。2 つの正しいオブジェクトと NULL。呼び出し後、2 つの正しい要素のみが保持されます。