⊗ppOpTrMC 79 of 107 menu

Penyelesaian Konflik Metode Trait dalam OOP di PHP

Karena satu kelas dapat menggunakan beberapa trait, maka kita mungkin menghadapi masalah yang muncul ketika dua trait memiliki metode dengan nama yang sama.

Dalam hal ini, PHP akan menghasilkan error fatal. Untuk memperbaiki situasi, kita perlu menyelesaikan konflik nama secara eksplisit. Bagaimana cara melakukannya - mari kita lihat dalam praktik.

Misalkan kita memiliki dua trait dengan metode method yang sama:

<?php trait Trait1 { private function method() { return 1; } } trait Trait2 { private function method() { return 2; } } ?>

Misalkan kita juga memiliki kelas Test, yang menggunakan kedua trait kita. Jika hanya menghubungkan kedua trait ke kelas kita, maka PHP akan menghasilkan error, karena trait memiliki metode yang bertabrakan:

<?php // Kode ini akan menghasilkan error! class Test { use Trait1, Trait2; // menghubungkan trait } ?>

Mari kita selesaikan konflik nama trait kita. Untuk itu ada operator khusus insteadof. Dengan operator ini kita akan menggunakan metode method dari trait Trait1 alih-alih metode yang sama dari trait Trait2:

<?php class Test { use Trait1, Trait2 { Trait1::method insteadof Trait2; } } new Test; ?>

Seperti yang Anda lihat, sintaksnya adalah sebagai berikut: pertama nama trait, lalu dua titik dua, lalu nama metode, lalu operator kita insteadof dan nama trait kedua.

Mari kita uji:

<?php class Test { use Trait1, Trait2 { Trait1::method insteadof Trait2; } public function __construct() { echo $this->method(); // akan menampilkan 1, karena ini adalah metode trait pertama } } new Test; ?>

Jadi, dalam kelas kita, kita mengatakan bahwa jika metode method digunakan, maka harus diambil dari trait pertama. Bisa juga sebaliknya - mengambil metode dari trait kedua:

<?php class Test { use Trait1, Trait2 { Trait2::method insteadof Trait1; } public function __construct() { echo $this->method(); // akan menampilkan 2, karena ini adalah metode trait kedua } } new Test; ?>

Bagaimanapun juga, jika kita menentukan untuk menggunakan metode dari satu trait, maka metode dari trait kedua menjadi tidak dapat diakses. Kita dapat menggunakan metode dari trait kedua, dengan mengganti namanya melalui kata kunci as, seperti ini:

<?php class Test { use Trait1, Trait2 { Trait1::method insteadof Trait2; Trait2::method as method2; } public function __construct() { echo $this->method() + $this->method2(); // akan menampilkan 3 } } new Test; ?>

Jika diinginkan, kita juga bisa mengganti nama metode dari trait pertama:

<?php class Test { use Trait1, Trait2 { Trait1::method insteadof Trait2; Trait1::method as method1; Trait2::method as method2; } public function __construct() { echo $this->method1() + $this->method2(); // akan menampilkan 3 } } new Test; ?>

Menggunakan kata kunci as tanpa mendefinisikan metode utama melalui insteadof tidak diperbolehkan, ini akan menghasilkan error:

<?php // Kelas ini akan menghasilkan error: class Test { use Trait1, Trait2 { Trait1::method as method1; Trait2::method as method2; } public function __construct() { echo $this->method1() + $this->method2(); } } new Test; ?>

Buatlah 3 trait dengan nama Trait1, Trait2 dan Trait3. Misalkan pada trait pertama ada metode method yang mengembalikan 1, pada trait kedua - metode dengan nama sama yang mengembalikan 2, dan pada trait ketiga - metode dengan nama sama, yang mengembalikan 3.

Buatlah kelas Test yang menggunakan ketiga trait yang telah kita buat. Buatlah dalam kelas ini metode getSum yang mengembalikan jumlah hasil metode dari trait yang terhubung.

Indonesia
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Kami menggunakan cookie untuk operasi situs, analitik, dan personalisasi. Pemrosesan data dilakukan sesuai dengan Kebijakan Privasi.
terima semua atur tolak