如何像 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 一个字符串,这会强制你进行字符串比较以进行错误检查,这是不必要的额外代码。
我需要将由我的 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 一个字符串,这会强制你进行字符串比较以进行错误检查,这是不必要的额外代码。