php - 如何使用 {'property-names-like-this' 声明动态 PHP 类 }

标签 php class dynamic

我将应用程序从 .NET 重写为 PHP。
我需要创建这样的类:

class myClass
{
    public ${'property-name-with-minus-signs'} = 5;
    public {'i-have-a-lot-of-this'} = 5; //tried with "$" and without
}

但它不起作用。
我不想使用这样的东西:
$myClass = new stdClass();
$myClass->{'blah-blah'};

因为我在代码中有很多这样的东西。

几天后编辑:我正在编写使用 SOAP 的应用程序。这些花哨的名称用于我必须与之通信的 API。

最佳答案

不能在 PHP 类属性中使用连字符(破折号)。
PHP 变量名、类属性、函数名和方法名必须以字母或下划线开头 ([A-Za-z_])并且可以跟任意数量的数字 ([0-9]) .

您可以通过使用成员重载来绕过此限制:

class foo
{
    private $_data = array(
        'some-foo' => 4,
    );

    public function __get($name) {
        if (isset($this->_data[$name])) {
            return $this->_data[$name];
        }

        return NULL;
    }

    public function __set($name, $value) {
        $this->_data[$name] = $value;
    }
}

$foo = new foo();
var_dump($foo->{'some-foo'});
$foo->{'another-var'} = 10;
var_dump($foo->{'another-var'});

但是,我非常不鼓励这种方法,因为它非常密集并且通常是一种糟糕的编程方式。正如已经指出的那样,带有破折号的变量和成员在 PHP 或 .NET 中都不常见。

关于php - 如何使用 {'property-names-like-this' 声明动态 PHP 类 },我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9322315/

相关文章:

javascript - PHP for-each 循环不起作用?

java - 实现扩展接口(interface) J 的接口(interface) I 的类 B 是否也扩展类型 I?

mysql - 如何在面向对象的 Coldfusion 设置中设置动态数量的表单字段?

java - 如何从网站接收动态变量(android)

python - 动态设置局部变量

php - 将永久数据存储在 php 文件中以减少 SQL 查询的数量是一个好习惯吗?

php - Docker 中的 nginx 和 php-fpm

php - 注解在 PHP 中有何用处?

c# - 在两个命名空间中使用相同的类名 - 优先考虑其中之一

java - Parse.com : with parseUser, 如何将数据保存在我在类解析中创建的列中?