オブジェクトをphp配列に入れますか?

PHPz
リリース: 2023-04-18 09:17:49
オリジナル
505 人が閲覧しました

PHP では、配列には文字列、数値、ブール値、オブジェクトなどのさまざまなタイプのデータを格納できます。オブジェクトを配列に格納すると、配列を使用してこれらのオブジェクトのコレクションを簡単に管理および操作できるため、配列に格納されたオブジェクトは非常に興味深い問題です。ただし、オブジェクトはメモリ内でステートフルですが、配列はステートレスであるため、オブジェクトを配列に格納する方法とそれらを正しく使用する方法を考慮する必要があります。

まず、オブジェクトを配列に格納します。ここでのオブジェクトとは、クラスのインスタンス化オブジェクト、つまり new キーワードによって作成されたオブジェクトを指します。たとえば、Person クラスを定義してから 2 つのオブジェクトを作成します。

class Person {
    public $name;
    public $age;
}

$p1 = new Person();
$p1->name = 'Tom';
$p1->age = 20;

$p2 = new Person();
$p2->name = 'John';
$p2->age = 30;

$persons = [$p1, $p2];
ログイン後にコピー

$p1 オブジェクトと $p2 オブジェクトを配列 $persons に格納することで、foreach ループ オブジェクトを使用して各配列を簡単に反復処理できます。次のように:

foreach ($persons as $p) {
    echo $p->name . ' is ' . $p->age . ' years old.';
}
ログイン後にコピー

同様に、for ループや while ループなどを使用して、配列内のオブジェクトを走査できます。

ただし、オブジェクトを配列に格納する場合には、微妙な違いがあることに注意することが重要です。 PHP 5 では、配列内のオブジェクトは参照によって渡されます。つまり、配列内のオブジェクトのプロパティを変更すると、元のオブジェクトも変更されます。例:

$p = new Person();
$p->name = 'Tom';
$p->age = 20;

$persons = [$p];

$persons[0]->name = 'John';

echo $p->name;  // 输出 John
ログイン後にコピー

ここでは、$persons 配列に格納されているオブジェクト $p は、$persons 配列内の $p オブジェクトのプロパティを変更した後、元の $p オブジェクトも変更されます。

PHP 7 では、配列内のオブジェクトは値によって渡されます。これは PHP 5 とは異なります。これは、配列内のオブジェクトのプロパティを変更するときに、元のオブジェクトは変更されないことを意味します。例:

$p = new Person();
$p->name = 'Tom';
$p->age = 20;

$persons = [$p];

$persons[0]->name = 'John';

echo $p->name;  // 输出 Tom
ログイン後にコピー

ここで、$persons 配列に格納されているオブジェクト $p は、$persons 配列内の $p オブジェクトのプロパティを変更した後、元の $p オブジェクトは変更されていません。

したがって、配列を使用してオブジェクトを格納する場合は、オブジェクトが値によって渡されるのか参照によって渡されるのかを明確に知る必要があります。参照渡しの場合、配列内のオブジェクトを変更すると、元のオブジェクトが変更される可能性があることに注意する必要があります。値で渡す場合、元のオブジェクトに影響を与えることなく、必要に応じて配列に格納されているオブジェクトを変更できます。

つまり、配列を使用してオブジェクトを格納できるため、オブジェクトのコレクションを簡単に管理および操作できます。配列に格納されたオブジェクトは値または参照によって渡されることに注意することが重要であり、配列内のオブジェクトを正しく使用するにはこれを考慮する必要があります。

以上がオブジェクトをphp配列に入れますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート