PHP 循环遍历最初是字符串的类名

问题描述 投票:0回答:1

可以在 php 中做这样的事情吗?假设我有这些课程:狗,猫。 我有一个 php 数组,比如

$s = ['Dog', 'Cat',];

我希望能够循环 $s 并运行它的类版本。

foreach ($s as $key => $pet){
$p =  new $pet(); // run the Dog class or Cat class

}
php laravel
1个回答
0
投票

在 PHP 编程语言中,可以通过使用保存类名称的字符串来动态创建类的实例。这种方法在事先不知道类名的情况下非常有用。为了实现这一点,可以利用该语言提供的功能,使用指定的字符串创建该类的新实例,如以下示例所示:

<?php 
class Dog {
    function __construct() {
        echo "Woof! I'm a dog.\n";
    }
}

class Cat {
    function __construct() {
        echo "Meow! I'm a cat.\n";
    }
}

$s = ['Dog', 'Cat'];

foreach ($s as $key => $pet) {
    $p = new $pet();
}

本示例涉及两个类:Dog 和 Cat。每个类都被赋予了一个生成消息的构造函数。执行脚本后,每个类的构造函数将被激活,创建每个类的一个实例,该实例将存储在 $s 数组中。

重要的是要记住,只有当类 Dog 和 Cat 定义在与实例化过程相同的范围内时,这种方法才能正确运行。如果它们在单独的文件中定义,则必须包含该文件或需要该文件。

此外,必须承认,如果不小心处理,变量类名的使用可能会产生潜在的安全问题。在任何情况下,如果没有足够的验证和清理以避免安全漏洞,都不应使用用户输入来动态生成类实例。

© www.soinside.com 2019 - 2024. All rights reserved.