Как в верхнем регистре строка автоматически созданного свойства в классе PHP, как в JavaScript?

Мне нужно преобразовать в верхний регистр строку, установленную динамическим __задавать конструктор моего класса 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;
}
}

Это возможно?

Спасибо за все,

-3

Решение

Я не верю, что есть способ сделать это, используя синтаксис в вашем примере кода. Переменная, к которой вы обращаетесь, является строкой и не имеет 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 по крайней мере, если ключ не существует (исключение может быть лучше, но зависит от того, как вы используете этот класс). Если вы возвращаете строку, это вынуждает вас сравнивать строки с проверкой ошибок, которая не требует дополнительного кода.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector