Bagaimana untuk melakukan pemprosesan refleksi dalam PHP7.0?

WBOY
Lepaskan: 2023-05-27 15:51:06
asal
714 orang telah melayarinya

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

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
Salin selepas log masuk

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;
}
Salin selepas log masuk

Selain daripada ini, kita juga boleh menggunakan kelas refleksi untuk mencipta contoh kelas seperti yang ditunjukkan di bawah:

$instance = $ref->newInstanceArgs([$arg1, $arg2]);
Salin selepas log masuk

Kaedah refleksi

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
Salin selepas log masuk

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;
Salin selepas log masuk

Selain itu, kita juga boleh menggunakan kaedah refleksi untuk memanggil kaedah :

$instance = new Foo();
$args = ['arg1', 'arg2'];
$result = $ref->invokeArgs($instance, $args);
Salin selepas log masuk

Atribut reflektif

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
Salin selepas log masuk

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;
Salin selepas log masuk

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);
Salin selepas log masuk

Kesimpulan

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!