Мне нужно преобразовать в верхний регистр строку, установленную динамическим __задавать конструктор моего класса PHP. Так же, как JavaScript .toUpperCase () функция.
Exemple:
$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;
}
}
Это возможно?
Спасибо за все,
Я не верю, что есть способ сделать это, используя синтаксис в вашем примере кода. Переменная, к которой вы обращаетесь, является строкой и не имеет 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 по крайней мере, если ключ не существует (исключение может быть лучше, но зависит от того, как вы используете этот класс). Если вы возвращаете строку, это вынуждает вас сравнивать строки с проверкой ошибок, которая не требует дополнительного кода.
Других решений пока нет …