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]   

> Описание: классы
implements
Отправлено: 19 Января, 2013 - 07:28:30
Post Id


Новичок


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


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




создал простой класс
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class myClass{
  3.  
  4. function test(){
  5. //..........................
  6. //......................
  7. }
  8. }
  9. ?>

затем работаю с ним, так

index.php


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

(Отредактировано автором: 19 Января, 2013 - 07:28:50)

 
 Top
DelphinPRO
Отправлено: 19 Января, 2013 - 08:35:43
Post Id



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


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


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




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


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
implements
Отправлено: 19 Января, 2013 - 08:55:05
Post Id


Новичок


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


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




DelphinPRO пишет:
error обязательно будет, если включить соответствующий уровень выводимых ошибок.

если еррор есть, то почему скрипт выполняется тогда?
 
 Top
spsu
Отправлено: 19 Января, 2013 - 08:59:38
Post Id



Частый гость


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


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




[quote=implements][/quote]
Скорее всего потомуч-то ошибка не фаталььная..
 
 Top
implements
Отправлено: 19 Января, 2013 - 09:32:47
Post Id


Новичок


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


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




spsu пишет:
Скорее всего потомуч-то ошибка не фаталььная..

ух, супер php!!! видимо мне после "нормальных" ООП (java,ruby)понять сложно такое=)
вообще,я думаю так использовать не пойдет, лучше создать всетаки экземпляр класса, вопрос такого тогда вида
в index.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. include "myClass";
  3. $myClass=new myClass();
  4. $myClass->test();
  5. //работает
  6.  
  7. function some_function(){
  8. $myClass->test();
  9. //не работает
  10. }
  11. ?>

как правильно использовать объект в функциях?

(Отредактировано автором: 19 Января, 2013 - 09:33:03)

 
 Top
spsu
Отправлено: 19 Января, 2013 - 09:35:44
Post Id



Частый гость


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


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




Цитата:
как правильно использовать объект в функциях?

Как и везде вы походу функц. не вызываете...
 
 Top
Мелкий Супермодератор
Отправлено: 19 Января, 2013 - 09:40:47
Post Id



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


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


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




implements, что-то вы как-то непоследовательны. То говорите об опыте в ruby и java, то об областях видимости функций не знаете.

implements пишет:
так вызываются тока статические методы, а у меня не статический, следовательно должен быть еррор

Сообщение об ошибке есть, но низкого уровня. Не стали пока что ломать совместимость с многим старым кодом. В PHP-то ООП прикручивается активно только последние лет 5, в отличии от канонично объектной явы, без ООП вовсе несуществующей.


-----
PostgreSQL DBA
 
 Top
implements
Отправлено: 19 Января, 2013 - 09:41:57
Post Id


Новичок


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


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




spsu пишет:
Как и везде вы походу функц. не вызываете...

вызываю, мне выдает, что $myClass(в some_function()) не инициализирована
 
 Top
DelphinPRO
Отправлено: 19 Января, 2013 - 10:02:55
Post Id



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


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


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




implements пишет:
видимо мне после "нормальных" ООП (java,ruby)понять сложно такое=)

Лукавите, батенька Улыбка

ваша переменная изнутри функции не видна. Создавайте объект класса унтри функции, или передавайте его параметром


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
implements
Отправлено: 19 Января, 2013 - 10:07:58
Post Id


Новичок


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


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




DelphinPRO пишет:
ваша переменная изнутри функции не видна. Создавайте объект класса унтри функции, или передавайте его параметром

передовать ее не не рентабельно она нужна и там и там, функция рекурсия,можно ее создать в функции и потом проверять, существует ли она или нет. вообще я думал index.php и все,что в нем, одно пространство, и думал что объявленная переменная в рамках этого скрипта будет видна везде
(Добавление)
да и вообще, в файле создаешь объект, потом в функциях, это не есть хорошо, память то будет кушаться зря=)
 
 Top
spsu
Отправлено: 19 Января, 2013 - 10:54:45
Post Id



Частый гость


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


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




Цитата:
да и вообще, в файле создаешь объект, потом в функциях, это не есть хорошо, память то будет кушаться зря=)

Сделай его глобальным, передавай по ссылке в функц.(чтоб память не елась)...
 
 Top
DelphinPRO
Отправлено: 19 Января, 2013 - 11:18:02
Post Id



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


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


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




spsu пишет:
Сделай его глобальным, передавай по ссылке в функц.(чтоб память не елась)...

Приехали...

Объекты в php5 ВСЕГДА передаются по ссылке:

PHP:
скопировать код в буфер обмена
  1. function func($obj) {
  2.         $obj -> prop2 = 'prop2';
  3. }
  4.  
  5. $o = new stdClass;
  6. $o -> prop1 = 'prop1';
  7.  
  8. echo '<pre>';
  9. print_r($o);
  10.  
  11. func($o);
  12.  
  13. print_r($o);


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
implements
Отправлено: 19 Января, 2013 - 11:34:37
Post Id


Новичок


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


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




spsu пишет:
Сделай его глобальным, передавай по ссылке в функц.(чтоб память не елась)...

ужасы просто))) в одном файле, используя функции, надо будет что, везде передавать объект, созданный не в функциях))))) гыыыы
 
 Top
KingStar
Отправлено: 19 Января, 2013 - 11:39:00
Post Id



Участник


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


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




можно патерном Registry


-----
То что программа работает, не означает что она написана правильно!
 
 Top
OrmaJever Модератор
Отправлено: 19 Января, 2013 - 12:00:53
Post Id



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


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


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




implements пишет:
ужасы просто))) в одном файле, используя функции, надо будет что, везде передавать объект, созданный не в функциях))))) гыыыы

ужасов тут нету, это всёравно что я приду на джава форум и скажу "да у вас тут даже функций в языке нету, одни классы. Ужас!". php так устроен, и к этом нужно привыкнуть. Если у вас есть несколько функйи коротые хотят работать с одним обьектом то обьедените их в класс.

PHP:
скопировать код в буфер обмена
  1. class A {
  2.    public $obj = null;
  3.  
  4.    public function a() {/* $this->obj->prop; ... */}
  5.    public function b() { /* $this->obj->method(); ... */}
  6.    public function c() { /* ... */}
  7. }
  8.  
  9. $a = new A();
  10. $a->obj = new AnotherClass();
  11. $a->a();

я предпологаю в java пишут имено так.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 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