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]   

> Без описания
Bios
Отправлено: 21 Ноября, 2009 - 17:04:14
Post Id



Новичок


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


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




тут вот такая проблема =( должно вывести "test_info" но почему то не выводит =( и вот не знаю как сделать =((


PHP:
скопировать код в буфер обмена
  1. class cp {
  2.         function cp(){
  3.                 admin::$info = "test_info";
  4.         }
  5.  
  6. }
  7. class admin {
  8.         static public $info;
  9.         function admin(){
  10.                 $cpp = new cp;
  11.                 print($this->info);
  12.        
  13.         }
  14.  
  15. }
  16. $adm = new admin;
 
 Top
Мелкий Супермодератор
Отправлено: 21 Ноября, 2009 - 17:16:42
Post Id



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


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


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




В PHP конструктор - __construct() а не имя класса ;)


-----
PostgreSQL DBA
 
 Top
Bios
Отправлено: 21 Ноября, 2009 - 17:17:47
Post Id



Новичок


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


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




не понял =))))
 
 Top
Мелкий Супермодератор
Отправлено: 21 Ноября, 2009 - 17:29:17
Post Id



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


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


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




PHP:
скопировать код в буфер обмена
  1. class test {
  2. function __construct() {echo "запустился конструктор класса";}
  3. function test() {echo "а эта функция запустится, только если к ней обратиться";}
  4. }



а вот так в другой класс писать нельзя вполне определённо. Писать-то можно в объекты (экземпляры класса)


-----
PostgreSQL DBA
 
 Top
JustUserR
Отправлено: 21 Ноября, 2009 - 17:36:06
Post Id



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


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


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




Bios Вопервых вы забыли проставить наследование - class admin extents cp
Вовторых обращение к элементу родительского класса осуществляется как parent::$info
Втретьих допустимо использование имени класса в качестве имени конструктора класса как это было в PHP4


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Bios
Отправлено: 21 Ноября, 2009 - 17:57:24
Post Id



Новичок


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


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




JustUserR class admin extents cp
просто у меня таких классов как cp штук 4 =)
(Добавление)
Мелкий

ничего не понял =((((
(Добавление)
что-то я запутался =(
как тогда что-то добавить в $info через второй класс который вызван в первом ???
 
 Top
Ch_chov
Отправлено: 21 Ноября, 2009 - 19:58:08
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


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




Bios попробуй заменить print($this->info); на print(self::$info);
Не совсем понятно, правда, зачем это всё нужно.

Мелкий пишет:
В PHP конструктор - __construct() а не имя класса

В PHP4 как раз так и было, конструктор это функция у которой имя совпадает с именем класса. В PHP5, для совместимости, эта схема тоже работает, если не объявлять метод __construct.

(Отредактировано автором: 21 Ноября, 2009 - 20:05:53)

 
 Top
Bios
Отправлено: 21 Ноября, 2009 - 20:13:15
Post Id



Новичок


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


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




Ch_chov
тут проблема не в выводе а в том что во второй функции не добавляет

вот тут я чуток потестил

PHP:
скопировать код в буфер обмена
  1. class cp {
  2.         function cp(){
  3.                 admin::$info = "info";
  4.                 admin::info("info_test");
  5.         }
  6.  
  7. }
  8. class admin {
  9.         static public $info;
  10.         function admin(){
  11.                 $cpp = new cp;
  12.                 print($this->info);
  13.        
  14.         }
  15.         function info($t){
  16.                 print($t);
  17.         }
  18.  
  19. }
  20. $adm = new admin;


admin::info("info_test"); - все норм
admin::$info = "info"; - не работает

тоисть к функцие со второго класса в первый я могу обратится а к переменной нет =(

я бы сделал что-то такого

PHP:
скопировать код в буфер обмена
  1.         function info($t){
  2.                 $this->info = $t;
  3.         }


но так как она вызвана во втором классе то будет ошибка
потому что оно посмотрит на $this->info а так как указано $this-> то будет липить в свой класс

Зачем мне это?:
просто у меня в первом классе есть глобальная переменная $html
и в зависимости от ссылки подключается класс он заменяет {news_panel} на кусок html кода

(Отредактировано автором: 21 Ноября, 2009 - 20:13:53)

 
 Top
Ch_chov
Отправлено: 21 Ноября, 2009 - 20:23:40
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


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




Какая версия php ?
(Добавление)
Bios пишет:
просто у меня в первом классе есть глобальная переменная $html
и в зависимости от ссылки подключается класс он заменяет {news_panel} на кусок html кода

Если переменная глобальная, к ней можно обращатся во всех классах. В данный момент твой код работает примерно следующим образом:
1. В конструкторе класса admin создается объект класса cp
2. В конструкторе класса cp присваивается значение статической переменной класса admin
В общем каша какая то.
 
 Top
Stierus Супермодератор
Отправлено: 23 Ноября, 2009 - 09:41:11
Post Id



Рекордсмен по количеству сообщений за 7 дней


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


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




Все на много проще Улыбка
В классе CP идет обращение к статической переменной
Цитата:
admin::$info = "test_info";
. Стат переменные не относятся к каким-либо экземплярам класса, поэтому обращаться к ней с помощью $this - неправильно:
PHP:
скопировать код в буфер обмена
  1. class cp {
  2.         function cp(){
  3.         admin::$info = "test_info";
  4.         }
  5. }
  6.  
  7. class admin {
  8.         static public $info;
  9.        
  10.         function admin(){
  11.                 $cpp = new cp;
  12.                 print(self::$info);
  13.         }
  14. }
  15. $adm = new admin;

(Добавление)
Да, кстати, если ты работаешь в php5 - объявляй конструкторы как __construct(), а не как имя класса. То, как ты пишешь - сделано исключительно для совместимости скриптов php4 ... в новых версиях планируют убрать это, так что пора уже перейти на нормальный вид Улыбка
 
My status
 Top
JustUserR
Отправлено: 23 Ноября, 2009 - 12:04:53
Post Id



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


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


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




Stierus пишет:
Да, кстати, если ты работаешь в php5 - объявляй конструкторы как __construct(), а не как имя класса. То, как ты пишешь - сделано исключительно для совместимости скриптов php4 ... в новых версиях планируют убрать это, так что пора уже перейти на нормальный вид
Вот товарищ не поверишь я и сам так думал но оказывается неправда
Делал один заказ - все нормально оттестировали работает - стал заливать на их хостинг лезут ошибки кучами - оказывается там стоял PHP4 и не __construct не private не работали
Так что пока на куче хостингов еще стоит PHP4 стоит задумать о некой совместимости (По крайней мере когда делаешь работу и не знаешь на каком хостинге это будут запускать Улыбка


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Stierus Супермодератор
Отправлено: 23 Ноября, 2009 - 14:14:24
Post Id



Рекордсмен по количеству сообщений за 7 дней


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


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




Если единственное различие в скрипте - это именование конструктора - то и говорить не о чем, глубоко все равно, как его именовать, а если указываются параметры видимости переменных, наследование и другие возможности Php5 - то этот код с любым объявлением конструкторов работать не будет на 4-й версии.

ps
Так я и написал, что только если он в Php5 работает Улыбка

(Отредактировано автором: 23 Ноября, 2009 - 14:15:24)

 
My status
 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