Php secara dinamis mengatur properti objek

Seperti biasa dengan rilis minor, PHP 8. 2 menambahkan beberapa penghentian. Penghinaan sering menjadi sumber frustrasi, meskipun penting untuk menyadari bahwa mereka sebenarnya sangat membantu. Saya sudah menulis tentang penanganan deprecations secara umum, jadi jika Anda sudah merasa frustasi, mungkin ada baiknya Anda melihat postingan tersebut terlebih dahulu. Hari ini, saya ingin fokus pada satu penghentian khususnya di PHP 8. 2. properti dinamis yang tidak digunakan lagi

Jadi hal pertama yang pertama, apa sebenarnya properti dinamis itu?

Misalnya kelas Post ini tidak memiliki properti name, namun demikian kami menyetelnya saat runtime

class Post
{
}

// …

$post = new Post();

$post->name = 'Name';

var_dump($post->name); // 'Name'

Mulai dari PHP 8. 2, properti dinamis ini tidak akan digunakan lagi

// …

$post->name = 'Name';
_

Anda akan melihat pesan ini. Deprecated: Creation of dynamic property Post::$name is deprecated

Menerapkan __get dan // … $post->name = 'Name';0 masih berfungsi

Anda mungkin panik saat ini, karena properti dinamis adalah bagian besar dari pemrograman meta di PHP — banyak kerangka kerja mengandalkannya

Tidak perlu khawatir. penghentian baru ini tidak akan memengaruhi kelas apa pun yang mengimplementasikan __get dan

// …

$post->name = 'Name';
0. Kelas yang mengimplementasikan fungsi ajaib ini akan tetap berfungsi sebagaimana mestinya

class Post
{
    private array $properties = [];
    
    public function __set(string $name, mixed $value): void
    {
        $this->properties[$name] = $value;
    }
    
    // …
}

// …

$post->name = 'Name';
_

Hal yang sama berlaku untuk objek

// …

$post->name = 'Name';
_3, mereka akan mendukung properti dinamis seperti sebelumnya

$object = new stdClass();

$object->name = 'Name'; // Works fine in PHP 8.2
_

Sekarang beberapa pembaca yang cerdas mungkin bertanya-tanya. jika

// …

$post->name = 'Name';
3 masih mengizinkan properti dinamis, apa yang akan terjadi jika Anda memperluasnya?

Memang, dimungkinkan untuk memperpanjang dari

// …

$post->name = 'Name';
_3 untuk mencegah pemberitahuan penghentian ditampilkan. Namun, menurut saya solusi ini jauh dari ideal

// Don't do this

class Post extends stdClass
{
}

$post = new Post();

$post->name = 'Name'; // Works in PHP 8.2
_

Php secara dinamis mengatur properti objek

Apa yang baru di PHP 8. 2

Alternatif yang lebih baik

Jika Anda benar-benar ingin menggunakan properti dinamis tanpa menerapkan __get dan

// …

$post->name = 'Name';
0, ada alternatif yang jauh lebih baik daripada memperluas dari
// …

$post->name = 'Name';
3

Tim inti PHP telah menyediakan atribut bawaan yang disebut

// …

$post->name = 'Name';
9. Seperti namanya, ini memungkinkan properti dinamis di kelas, tanpa harus bergantung pada ekstensi samar

#[\AllowDynamicProperties]
class Post
{
}

$post = new Post();

$post->name = 'Name'; // All fine

PHP dulunya adalah bahasa yang sangat dinamis, tetapi sekarang telah beralih dari pola pikir itu untuk sementara waktu. Secara pribadi saya pikir itu hal yang baik untuk merangkul aturan yang lebih ketat dan mengandalkan analisis statis sedapat mungkin, karena menurut saya itu mengarah pada penulisan kode yang lebih baik

Saya bisa membayangkan developer yang mengandalkan properti dinamis, yang kurang senang dengan perubahan ini. Jika Anda termasuk dalam grup itu, mungkin berguna untuk melihat lebih dekat ke dalam analisis statis. Anda dapat melihat Road to PHP saya. Seri Analisis Statis jika Anda ingin mempelajari lebih lanjut

Jika Anda bersedia menginvestasikan waktu untuk mencari tahu analisis statis, saya cukup yakin bahwa sebagian besar dari Anda tidak akan pernah ingin kembali ke kekacauan yang merupakan bahasa pemrograman dinamis. Dengan PHP, kami beruntung karena kedua opsi tersedia dan Anda dapat bermigrasi secara bertahap ke sistem tipe yang lebih ketat

Jadi iya. penghentian ini mungkin sedikit menyakitkan, tapi saya percaya itu yang terbaik dari bahasa untuk melakukannya. Dan ingat bahwa itu tidak akan menjadi kesalahan fatal sampai PHP 9. 0, jadi ada banyak waktu untuk menghadapinya

👍

👍

👍 0

Melihat tpyo? . Jika Anda ingin tetap mendapatkan informasi terbaru tentang apa yang terjadi di blog ini, Anda dapat mengikuti saya di Twitter atau berlangganan buletin saya. Email Berlangganan

Bagaimana Anda mengakses properti objek secara dinamis?

Untuk mengakses properti objek secara dinamis di JS, Anda perlu meneruskan nama properti sebagai string dalam tanda kurung siku . Saat nilai kunci variabel berubah, kami mendapat akses ke properti berbeda dari objek pengguna. Cara paling umum untuk mengakses properti objek dalam JavaScript adalah titik.

Bagaimana Anda memanggil properti objek di PHP?

Dalam metode kelas properti non-statis dapat diakses dengan menggunakan -> (Object Operator). $this->property (di mana properti adalah nama properti) . Properti statis diakses dengan menggunakan. (Titik Dua). diri sendiri. $properti.

Bagaimana cara mendapatkan nilai properti suatu objek di PHP?

Fungsi get_object_vars() adalah fungsi bawaan dalam PHP yang digunakan untuk mendapatkan properti dari objek yang diberikan.