Начал писать проект. Пока все на начальной стадии, но уже и тут столкнулся с проблемой: ну никак не хочет работать проверка переменной на пустоту: PHP: private function CheckEmpty($element) { if(!empty($element)) return $element; else { echo "Error 2: Empty var occure <br>"; $this->SetError("Empty var occure: $element", 2); exit; } } ставит ошибку и все тут! эта функция вызывается в функции проверки переменной: PHP: public function CheckName($name="") { $name = trim($name); $name = htmlspecialchars($name); $this->CheckEmpty($name); return $name; } вобщем никак не могу разобрать почему не хочет работать... з.ы. это все для проверки введенных данных при регистрации.. может кто более рациональный способ знает..
Ты взялся писать проект, ничерта не понимания ни об ООП, ни о передаче переменных. Во-первых, ты никогда не сможешь реально проверить существование переменной, передавая её в какую-либо функцию. Объясняю: передавая несуществующую переменную в функцию, передаётся её значение. Если передавать ссылку на переменную, то при этом СОЗДАЁТСЯ переменная и, разумеется, вернется true. Если же идет речь о проверке property класса, то делается это другим способом - через интернальную переменную this.
действительно, понимание ООП пока оставляет желать лучшего. Поэтому и взялся писать пробный проект, даже лучше сказать не проект, а набор классов... Если кого-то что-то задевает, что человек который только разбирается с ООП взялся писать проект - могу утешить - проект мой собственный, т.е. пишу сам для себя, для того, чтобы разобраться с ООП. Про передачу переменных: естественно нужно проверять значение переменной, которое и передается из функции в функцию. Изначально же в функции и посылается значение переменной, которое должно провериться и вернуться. Вопрос в другом: почему в данном конкретном случае не работает if(!empty($element)) ?!
Я напишу код, попробуй самостоятельно разобраться: PHP: //<? private function CheckEmpty($element) { if(!$element) { echo "Error 2: Empty var occure <br>"; $this->SetError("Empty var occure: $element", 2); exit; } else return $element }
Оставлю вопрос без ответа в виду его очевидности для человека такого уровня =) Увы, не оправдал надежд.
Apple не знаю, может я просто сильно сегодня запарился с этими техническими текстами на работе, но, честно говоря не понял ни намёка ни не намёка ни смысла...
...в который раз уже случается такое... когда ошибка в элементарном: изначально в форме стояло одно поле под пароль с именем 'pass' но потом я решил, что нужно два поля под пароль (сверять одно с другим..чтобы от опечаток оградиться) получал значения переменных по именам pass1 и pass2, а сам забыл изменить имена у <input>`ов в итоге было два поля с именами pass вариант с PHP: private function CheckEmpty($element) { if(!empty($element)) return $element; else { echo "Error 2: Empty var occure <br>"; $this->SetError("Empty var occure: $element", 2); exit; } } работает исправно. дело все было в том, что проверяя полученные переменные, функция исправно доходила до "паролей", после чего говорила, что поля пустые, ставила ошибку и все! помогло увидеть этот недосмотр var_dump - спасибо) ..но все же остался вопрос: почему так вернее: PHP: private function CheckEmpty($element) { if(!$element) { echo "Error 2: Empty var occure <br>"; $this->SetError("Empty var occure: $element", 2); exit; } else return $element } ? или не вернее? что-то пытаясь разобраться с этим примером - все больше прихожу к тому, что они схожи, только подходят "с разных сторон"... или в этом и есть главное отличие, характерное для ООП ??
lanzs Рассмотрим следующие примеры: PHP: <?php error_reporting(E_ALL); // Рассмотрим такой вариант if(empty($foo)) echo "'foo' does not exist<br />"; // Следующий вариант уже неверный if(!$bar) echo "'bar' does not exist<br />"; // Следующие два варианта идентичны $empty = array(); if(!$empty) echo "Variable is empty<br />"; if(empty($empty)) echo "Variable is empty<br />"; ?>
Тут такой момент, что empty - языковая конструкция, возвращающая true только и только в том случае, если переменная эквивалентна приведенному типу данных bool(false), или этой переменной не существует. Т.е все случаи, когда массив пуст, значение 0 или тому подобное, то empty вернет true, но вернет она true так же в том случае, если переменная не декларирована.
Более сложный пример для раздумий: PHP: <?php /** * Попробуем имитировать проверку переменной. * Будем помнить, что РНР не С++ и не требует предварительной * инициализации переменной. */ // Функция проверки существования переменной function var_exists(&$varname) { return isset($varname); } // Декларация переменной $foo; // Она всё ещё не существует // Проверяем это нашей функцией var_dump(var_exists($foo)); var_dump(empty($foo)); // вернет true // Инициализация переменной $foo $foo = 0; var_dump(var_exists($foo)); // вернет true var_dump(empty($foo)); // Внимание! тоже true ?>
Apple, спасибо за столь развернутый ответ я подходил ко всему на более примитивном уровне..буду переосмысливать и переучиваться