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

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

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
VestCoastman
Отправлено: 02 Августа, 2013 - 01:13:16
Post Id



Посетитель


Покинул форум
Сообщений всего: 374
Дата рег-ции: Дек. 2010  


Помог: 3 раз(а)




Можно ли вернуть значение класса? Возможно, я не корректно задал вопрос, но постараюсь показать, что мне нужно и возможно ли такое.
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 и был результатом класса.
 
 Top
Okula
Отправлено: 02 Августа, 2013 - 01:48:02
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




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. }
 
 Top
DelphinPRO
Отправлено: 02 Августа, 2013 - 01:51:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




в данном случае метод name сработает как конструктор (совместимость с php4);

Конструкция new всегда возвращает объект. Начиная с php5.0 empty для объектов всегда будет возвращать истину.
(Добавление)
Если вы хотите предотвратить создание объекта в его конструкторе, то можете бросить там исключение.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
VestCoastman
Отправлено: 02 Августа, 2013 - 02:08:27
Post Id



Посетитель


Покинул форум
Сообщений всего: 374
Дата рег-ции: Дек. 2010  


Помог: 3 раз(а)




Наверное с пользователем будет понятнее
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 для объектов всегда будет возвращать истину.

Всё, теперь понял - объект всегда истина( хоть это и очевидно=) ). Воспользуюсь тогда своим примером выше.

(Отредактировано автором: 02 Августа, 2013 - 02:17:22)

 
 Top
DelphinPRO
Отправлено: 02 Августа, 2013 - 08:28:37
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




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

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


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Contr
Отправлено: 02 Августа, 2013 - 08:38:04
Post Id



Частый гость


Покинул форум
Сообщений всего: 202
Дата рег-ции: Окт. 2011  
Откуда: с Марса


Помог: 1 раз(а)




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


Новичок


Покинул форум
Сообщений всего: 40
Дата рег-ции: Май 2013  


Помог: 1 раз(а)




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

расслабьтесь, это пых

(Отредактировано автором: 02 Августа, 2013 - 08:46:04)

 
 Top
DelphinPRO
Отправлено: 02 Августа, 2013 - 09:32:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




stifard пишет:
расслабьтесь, это пых

Если язык нетипизированный, это не значит что писать нужно хрен пойми как..


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
VestCoastman
Отправлено: 02 Августа, 2013 - 12:06:21
Post Id



Посетитель


Покинул форум
Сообщений всего: 374
Дата рег-ции: Дек. 2010  


Помог: 3 раз(а)




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

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

В принципе, вы правы.
За класс user, по сути, может отвечать и $user->register, но т.к. $user = false, то придется создавать новый объект new user, что является на мой взгляд, не благоразумным.
Улыбка
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB