【问题标题】:How to upper case a string of auto created property in a PHP class like in JavaScript?如何在 JavaScript 中的 PHP 类中将自动创建的属性字符串大写?
【发布时间】:2017-03-17 04:18:40
【问题描述】:

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

示例:

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

需要输出: 大写测试

这是我的实际课程代码:

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;
    }
}

这可能吗?

谢谢大家,

【问题讨论】:

    标签: php class variables dynamically-generated uppercase


    【解决方案1】:

    我不相信有办法使用示例代码中的语法来做到这一点。您正在访问的变量是一个字符串,并且没有 toUpperCase 函数。如果你必须使用这样的函数格式,我会说我能想到的最好方法就是将 toUpperCase 函数添加到你的 Post 类中。

    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 定义以至少返回 false (例外可能会更好,但取决于您如何使用此类)。如果您要返回一个字符串,这会迫使您对错误检查进行字符串比较,这是不必要的额外代码。

    【讨论】:

    • 感谢您的回答。我的问题的目的是知道如何像在 JavaScript 中一样使用 PHP OO,并使用几个内联函数来更改对象的内容。示例:` var test = 'Object'; var concatText = '在 JavaScript ###'; alert(test.concat(" ", concatText).replace('###','123').toUpperCase()); `
    猜你喜欢
    • 1970-01-01
    • 2011-06-04
    • 2023-04-02
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    相关资源
    最近更新 更多