Свойства, к которым обращаются через __get() и их работа с empty()/isset()

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Собственно, вопрос глупый, но все же.

Имеются вводные данные:

Код:
CREATE TABLE IF NOT EXISTS `config` (
  `var` varchar(50) NOT NULL,
  `value` varchar(250) NOT NULL,
  UNIQUE KEY `var` (`var`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
PHP:
<?php

class Config extends Magic {

	private static $_instance;

	public static function getInstance() {
		if (self::$_instance === NULL) {
			self::$_instance = new self();
		}
		return self::$_instance;
	}

	private function __construct() {}

	public function __get($name) {
		if (is_object($data = parent::__get($name))) {
			return $data;
		} else {
			return (($data = SQL::getInstance()->fetch('SELECT value FROM config WHERE var=:var', array(':var' => $name))) && !empty($data)) ? $data : false;
		}
	}
}
Собственно, есть код, который путем вызова кода:

PHP:
echo Config::getInstance()->test;
Получает данные из таблицы config, если там есть поле var равное test.

В случае прямого обращения, все работает нормально, но если написать:

PHP:
echo (!empty(Config::getInstance()->test)) ? 'yes' : 'no';
Получаем полный крах. Есть мысли? Кто сталкивался.

PS: Предлагать переписать мне сие - не надо. Я просто задаю вопрос из теоретических соображений, сам от этого подхода я отказался.
 

Andkorol

Новичок
Там вроде дело в самой функции empty():
Note:

empty() only checks variables as anything else will result in a parse error. In other words, the following will not work: empty(trim($name)). Instead, use trim($name) == false.
empty может использоваться только для проверки переменных – и не может применяться непосредственно к данным.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Вурдалак
Ага, спасибо, этот метод то я и провафлил... Вопрос решен
 
Сверху