PHP / Magento: empty (свойство $ object- & gt;) возвращает true, несмотря на то, что свойство String

Я установил некоторое значение с помощью функции setData Magento:

$this->getChild('childBlockName')->setData('search_field_value', $this->__('field value'));

в родительском .phtml файле.

Затем в дочернем .phtml файле я пытаюсь получить значение:

echo $this->search_field_value.'<br />';
$testvar = empty($this->search_field_value) ? 'empty value':'non empty value';
echo $testvar;

эхо:

'field value'
'empty value'

а также:

$testvar = $this->search_field_value;
$testvar2 = empty($testvar) ? 'empty value':'non empty value';
echo $testvar2;

эхо:

'non empty value'

Почему свойство объекта распознается как непустое только после присвоения его переменной?

0

Решение

здесь проблема с функцией PHP

empty()

эта функция принимает только параметр. Если у вас есть такая функция, как:

function getValue(){
return "hallo";
}

а затем попробуйте сделать что-то вроде:

echo empty(getValue());

вы получите ошибку, но если вы попытаетесь сделать:

$val = getValue();
echo empty($val);

Вы получите правильный ответ без ошибок. Это означает, что функция empty () не исключает возвращаемое значение, только переменную.

Я надеюсь, что это помогает.

объяснение для magento:

да, вы правы, ваш код работает нормально, но в magento он немного отличается от вашего примера, потому что magento фактически использует магические функции и массив:

когда вы устанавливаете виртуальную переменную в magento, она фактически становится частью массива, а не просто виртуальной переменной, как в вашем примере. Если вы посмотрите в функции пурпурного

public function setData($key, $value=null);

есть строка, где вы добавляете свое значение в массив _data:

$this->_data[$key] = $value;

Итак, когда вы делаете что-то вроде этого:

$this->search_field_value

вы на самом деле вызываете магический метод __call, и эта функция ищет в массиве _data введенное значение, в нашем случае search_field_value. Это причина, почему magento возвращается пустым.

1

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

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

По вопросам рекламы [email protected]