Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Возврат значения класса
Форумы портала PHP.SU » » Вопросы новичков » Возврат значения класса

Страниц (1): [1]
 

1. VestCoastman - 02 Августа, 2013 - 01:13:16 - перейти к сообщению
Можно ли вернуть значение класса? Возможно, я не корректно задал вопрос, но постараюсь показать, что мне нужно и возможно ли такое.
PHP:
скопировать код в буфер обмена
  1. class name{
  2.    public function name(){
  3.       return false;
  4.    }
  5.  
  6.    public function test(){
  7.       return "test";
  8.    }
  9. }
  10.  
  11. $name = new name;
  12.  
  13. if(empty($name)){echo "Empty";}else{echo $name->test();}

Т.е. чтобы метод name и был результатом класса.
2. Okula - 02 Августа, 2013 - 01:48:02 - перейти к сообщению
VestCoastman, непонятно что ты хотел показать этим примером.
Например такой класс:
PHP:
скопировать код в буфер обмена
  1. class name {
  2.    
  3.     public function __construct($name = '') {
  4.         if(empty($name)) throw new Exception('False');
  5.     }
  6.    
  7.     public function test() {
  8.         return 'test';
  9.     }
  10.    
  11. }

1 вариант вызова (выведет на экран False):
PHP:
скопировать код в буфер обмена
  1. try {
  2.     $name = new name();
  3.     echo $name->test();
  4. } catch (Exception $err) {
  5.     echo $err->getMessage();
  6. }

2 вариант вызова (выведет на экран test):
PHP:
скопировать код в буфер обмена
  1. try {
  2.     $name = new name(true);
  3.     echo $name->test();
  4. } catch (Exception $err) {
  5.     echo $err->getMessage();
  6. }
3. DelphinPRO - 02 Августа, 2013 - 01:51:18 - перейти к сообщению
в данном случае метод name сработает как конструктор (совместимость с php4);

Конструкция new всегда возвращает объект. Начиная с php5.0 empty для объектов всегда будет возвращать истину.
(Добавление)
Если вы хотите предотвратить создание объекта в его конструкторе, то можете бросить там исключение.
4. VestCoastman - 02 Августа, 2013 - 02:08:27 - перейти к сообщению
Наверное с пользователем будет понятнее
PHP:
скопировать код в буфер обмена
  1. class user{
  2.    public function user(){
  3.       return false;
  4.    }
  5.  
  6.    public function name(){
  7.       return "ivan";
  8.    }
  9. }
  10.  
  11. $user = new user;
  12.  
  13. if($user->user()===false){ $user = false; }


Т.е. проходит проверка на существование пользователь(его авторизацию). В противном случае возвращает false.
(Добавление)
DelphinPRO пишет:
в данном случае метод name сработает как конструктор (совместимость с php4);

Конструкция new всегда возвращает объект. Начиная с php5.0 empty для объектов всегда будет возвращать истину.

Всё, теперь понял - объект всегда истина( хоть это и очевидно=) ). Воспользуюсь тогда своим примером выше.
5. DelphinPRO - 02 Августа, 2013 - 08:28:37 - перейти к сообщению
VestCoastman пишет:
Т.е. проходит проверка на существование пользователь(его авторизацию). В противном случае возвращает false.
лучше если класс пользователя будет иметь специальный метод, сообщающий о статусе авторизации:
if ($user->isAuth()) {}

PS перезаписывать переменную, в которой ожидается объект значением другого типа как-то не кошерно...
6. Contr - 02 Августа, 2013 - 08:38:04 - перейти к сообщению
DelphinPRO пишет:
специальный метод, сообщающий о статусе авторизации
У меня:
PHP:
скопировать код в буфер обмена
  1. if(session::get('logged') == true){
  2.    ...
  3. } else {
  4.    header("Location: http://назад_на_авторизацию");
  5. }
7. stifard - 02 Августа, 2013 - 08:45:37 - перейти к сообщению
DelphinPRO пишет:
перезаписывать переменную, в которой ожидается объект значением другого типа как-то не кошерно...

расслабьтесь, это пых
8. DelphinPRO - 02 Августа, 2013 - 09:32:59 - перейти к сообщению
stifard пишет:
расслабьтесь, это пых

Если язык нетипизированный, это не значит что писать нужно хрен пойми как..
9. VestCoastman - 02 Августа, 2013 - 12:06:21 - перейти к сообщению
DelphinPRO пишет:
VestCoastman пишет:
Т.е. проходит проверка на существование пользователь(его авторизацию). В противном случае возвращает false.
лучше если класс пользователя будет иметь специальный метод, сообщающий о статусе авторизации:
if ($user->isAuth()) {}

PS перезаписывать переменную, в которой ожидается объект значением другого типа как-то не кошерно...

В принципе, вы правы.
За класс user, по сути, может отвечать и $user->register, но т.к. $user = false, то придется создавать новый объект new user, что является на мой взгляд, не благоразумным.
Улыбка

 

Powered by ExBB FM 1.0 RC1