PHP7.0 memperkenalkan beberapa ciri pantulan baharu, membolehkan kami mengendalikan maklumat meta kelas dan objek PHP dengan lebih mudah. Refleksi ialah keupayaan untuk memperoleh dan mengendalikan kelas secara dinamik, antara muka, fungsi, kaedah dan sifat Ia boleh digunakan untuk menjana dokumen secara automatik, alat penyahpepijatan, rangka kerja pemalam, dsb.
Dalam artikel ini, kami akan memperkenalkan cara untuk melaksanakan pemprosesan refleksi dalam PHP7.0, termasuk pemerolehan dan pengendalian kelas refleksi, kaedah dan sifat.
Kelas refleksi ialah asas refleksi Kita boleh menggunakan kelas ReflectionClass
untuk mendapatkan maklumat meta kelas. Berikut ialah contoh:
class Foo { public $prop1; private $prop2; protected $prop3; function __construct($arg) { // ... } public static function bar() { // ... } private function baz($arg) { // ... } } $ref = new ReflectionClass('Foo'); echo $ref->getName(); // 输出 Foo
Dalam contoh di atas, kami menggunakan new ReflectionClass('Foo')
untuk mendapatkan objek pantulan kelas Foo
, dan kemudian gunakan kaedah getName()
untuk mendapatkan nama kelas.
Melalui kelas refleksi, kita boleh mendapatkan maklumat meta kelas yang lain, seperti atribut, kaedah, pemalar, dsb. Berikut adalah beberapa contoh:
// 获取类的属性 $props = $ref->getProperties(); foreach ($props as $prop) { echo $prop->getName(); } // 获取类的方法 $methods = $ref->getMethods(); foreach ($methods as $method) { echo $method->getName(); } // 获取类的常量 $consts = $ref->getConstants(); foreach ($consts as $name => $value) { echo $name . ' => ' . $value; }
Selain daripada ini, kita juga boleh menggunakan kelas refleksi untuk mencipta contoh kelas seperti yang ditunjukkan di bawah:
$instance = $ref->newInstanceArgs([$arg1, $arg2]);
Kaedah refleksi Ia adalah sebahagian daripada kelas refleksi Kita boleh menggunakan kelas ReflectionMethod
untuk mendapatkan maklumat meta kaedah. Berikut ialah contoh:
class Foo { public static function bar() { // ... } private function baz($arg) { // ... } } $ref = new ReflectionMethod('Foo', 'bar'); echo $ref->getName(); // 输出 bar
Dalam contoh di atas, kami menggunakan new ReflectionMethod('Foo', 'bar')
untuk mendapatkan objek pantulan kaedah Foo
dalam kelas bar()
, dan kemudian gunakan kaedah getName()
untuk mendapatkan nama kaedah.
Kita juga boleh menggunakan kaedah refleksi untuk mendapatkan parameter, nilai pulangan, pengubah suai dan maklumat lain kaedah:
// 获取方法的参数 $params = $ref->getParameters(); foreach ($params as $param) { echo $param->getName(); } // 获取方法的返回值 $return = $ref->getReturnType(); echo $return->getName(); // 获取方法的修饰符 $modifiers = $ref->getModifiers(); echo $modifiers;
Selain itu, kita juga boleh menggunakan kaedah refleksi untuk memanggil kaedah :
$instance = new Foo(); $args = ['arg1', 'arg2']; $result = $ref->invokeArgs($instance, $args);
Atribut reflektif ialah satu lagi bahagian penting dalam kelas refleksi Kita boleh menggunakan kelas ReflectionProperty
untuk mendapatkan maklumat meta bagi atribut. Berikut ialah contoh:
class Foo { public $prop1; private $prop2; protected static $prop3; } $ref = new ReflectionProperty('Foo', 'prop1'); echo $ref->getName(); // 输出 prop1
Dalam contoh di atas, kami menggunakan new ReflectionProperty('Foo', 'prop1')
untuk mendapatkan objek pantulan atribut Foo
dalam kelas prop1
, dan kemudian gunakan kaedah getName()
untuk mendapatkan nama atribut.
Kami juga boleh menggunakan atribut pantulan untuk mendapatkan pengubah suai atribut, nilai lalai dan maklumat lain:
// 获取属性的修饰符 $modifiers = $ref->getModifiers(); echo $modifiers; // 获取属性的默认值 $default = $ref->getDefaultValue(); echo $default;
Selain itu, kami juga boleh menggunakan atribut pantulan untuk menetapkan dan mendapatkan nilai atribut:
$instance = new Foo(); $ref->setValue($instance, 'new value'); $value = $ref->getValue($instance);
Refleksi ialah fungsi berkuasa yang boleh membantu kami memproses meta-maklumat kelas dan objek dengan lebih mudah. Dalam PHP7.0, kita boleh menggunakan kelas ReflectionClass
, ReflectionMethod
dan ReflectionProperty
untuk mendapatkan dan mengendalikan maklumat tentang kelas, kaedah dan sifat. Ciri refleksi ini menjadikan PHP lebih fleksibel dan boleh diperluaskan.
Atas ialah kandungan terperinci Bagaimana untuk melakukan pemprosesan refleksi dalam PHP7.0?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!