如何像 JavaScript 一样在 PHP class 中大写自动创建的字符串 属性?

How to upper case a string of auto created property in a PHP class like in JavaScript?

我需要将由我的 PHP class 的动态 __set 构造函数设置的字符串转换为大写。就像 JavaScript .toUpperCase() 函数.

示例:

$myObject = new Post();
$myObject->fooVar = 'Upper Case Test';
$myObject->fooVar->toUpperCase();
echo $myObject->fooVar;

需要输出: 大写测试

这是我的实际 class 代码:

class Post {
    private $data;

    public function __construct()
    {
        echo 'Class "'. __CLASS__. '" started!'; // constructor debug
    }

    public function __destruct()
    {
        echo 'Class "'. __CLASS__. '" destroyed.'; // constructor debug
    }


    public function __get($varName)
    {
        if (!array_key_exists($varName, $this->data))
        {
            //this attribute is not defined!
            $this->data[$varName] = 'ERROR!';
            return $this->data[$varName];
        }
        else
        {
            return $this->data[$varName];
        }
    }

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

    public function toUpper($object){
        $object = strtoupper($object);  
        return  $object;
    }
}

这可能吗?

谢谢大家,

我认为没有办法使用示例代码中的语法来完成此操作。您正在访问的变量是一个字符串,没有 toUpperCase 函数。如果你必须使用这样的函数格式,我会说我能想到的最好的方法是将 toUpperCase 函数添加到你的 Post class 中,就像这样。

class Post {

    ...

    public function toUpperCase($key){
        if (array_key_exists($key, $this->data) && is_string($this->data[$key])) {
            $this->data[$key] = strtoupper($key);
        }
    }
}

然后就可以这样使用了:

$myObject = new Post();
$myObject->fooVar = 'Upper Case Test';
$myObject->toUpperCase('fooVar');
echo $myObject->fooVar;

但是,我认为像下面这样的东西会更好并且不需要 toUpperCase 函数。

if ($myObject->fooVar)
    $myObject->fooVar = strtoupper($myObject->fooVar);

我建议至少在密钥不存在的情况下将您的 __get 定义修改为 return false(异常可能更好,但取决于您如何使用此 class).如果你正在 returning 一个字符串,这会强制你进行字符串比较以进行错误检查,这是不必要的额外代码。