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 :: Static and not Static

 PHP.SU

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


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

> Описание: Как совместить?
Joo
Отправлено: 19 Июля, 2010 - 19:24:37
Post Id



Гость


Покинул форум
Сообщений всего: 99
Дата рег-ции: Нояб. 2009  
Откуда: Казахстан


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




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

PHP:
скопировать код в буфер обмена
  1. class foo(){
  2.   public function bar(){}
  3. }
  4. //Надо добиться работоспособности данного кода
  5. $f = new foo();
  6. $f->bar();
  7. foo::bar();


Следует учесть, что в методе могут быть обращения как к static свойствам так и к не статик.


-----
"Им будет не просто, тем кто полагается на истину авторитета, вместо ​того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог
 
 Top
Champion Супермодератор
Отправлено: 19 Июля, 2010 - 19:58:39
Post Id



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


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


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




Статичные методы и не статичные ведут себя по-разному. Не может метод одновременно быть и так, и так. Ты ведь не можешь идти одновременно налево и направо.
 
 Top
Joo
Отправлено: 19 Июля, 2010 - 20:08:35
Post Id



Гость


Покинул форум
Сообщений всего: 99
Дата рег-ции: Нояб. 2009  
Откуда: Казахстан


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




Champion пишет:
Статичные методы и не статичные ведут себя по-разному. Не может метод одновременно быть и так, и так. Ты ведь не можешь идти одновременно налево и направо.


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

Я знаю, что вызвать функцию можно и так и так, но хотелось бы определить каким образом функция вызвана, как статик или нет, и от этого как раз определить её поведение.

У меня есть класс. В некоторых местах нужны, отдельные экземпляры этого класса, а в некоторых нужен глобальный экземпляр.
Конечно можно где то объявить переменную, и там где надо просто написать global $varFoo; а можно и прям внутри класса статическую переменную данного класса сделать, static $varFoo; и потом к ней обращаться как foo::$varFoo->bar(); Можно. Но задача стоит в другом, нужно чтобы был static и not static метод с одним именем и обращение происходило как foo::bar() или varFoo->bar()

(Отредактировано автором: 19 Июля, 2010 - 20:12:15)



-----
"Им будет не просто, тем кто полагается на истину авторитета, вместо ​того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог
 
 Top
wats
Отправлено: 19 Июля, 2010 - 20:37:36
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Июль 2010  
Откуда: Пермь, Россия


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




так нельзя сделать и вообще в чем смысл?


-----
Обычный web-мастер
 
 Top
Joo
Отправлено: 19 Июля, 2010 - 20:42:47
Post Id



Гость


Покинул форум
Сообщений всего: 99
Дата рег-ции: Нояб. 2009  
Откуда: Казахстан


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




wats пишет:
так нельзя сделать и вообще в чем смысл?


Смысл есть. А на счет нельзя, я когда то встречал пример похожего поведения, но не обратил внимания, а теперь не могу отыскать.


-----
"Им будет не просто, тем кто полагается на истину авторитета, вместо ​того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог
 
 Top
Joo
Отправлено: 20 Июля, 2010 - 13:53:13
Post Id



Гость


Покинул форум
Сообщений всего: 99
Дата рег-ции: Нояб. 2009  
Откуда: Казахстан


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




Все просто, но в свежей версии PHP вызовет предупреждение
PHP:
скопировать код в буфер обмена
  1. class foo{
  2.     public function bar(){
  3.         if(isset($this)){
  4.             echo('Не статик');
  5.         }else{
  6.             echo('Статик');
  7.         }
  8.     }
  9. }
  10.  
  11. $obj = new foo();
  12. $obj->bar();
  13. foo::bar();


-----
"Им будет не просто, тем кто полагается на истину авторитета, вместо ​того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог
 
 Top
ArchAngel
Отправлено: 20 Июля, 2010 - 17:45:57
Post Id


Новичок


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


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




Извиняюсь за такой нубский вопрос но что делать параметр static ?

(Отредактировано автором: 20 Июля, 2010 - 17:46:37)

 
 Top
unded
Отправлено: 20 Июля, 2010 - 21:21:12
Post Id


Новичок


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


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




Статические члены класса
Определения классов могут теперь включить статических членов класса (свойства и методы), доступ к которым осуществляется через класс. Общее использование статических членов показано на примере:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class Singleton {
  3.      static private $instance = NULL;
  4.  
  5.      private function __construct() {
  6.      }
  7.  
  8.      static public function getInstance() {
  9.          if (self::$instance == NULL) {
  10.              self::$instance = new Singleton();
  11.          }
  12.          return self::$instance;
  13.      }
  14. }
  15. ?>

Статические методы
Вы можете теперь определить методы как статические, разрешая им быть вызванными вне контекста объекта. Статические методы не определяются через переменную $this, поскольку они не должны быть ограничены определенным объектом.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. class MyClass {
  4.      static function helloWorld() {
  5.          print "Hello, world";
  6.      }
  7. }
  8. MyClass::helloWorld();
  9. ?>
  10.  
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB