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]   

> Без описания
Voodoo
Отправлено: 29 Июня, 2013 - 14:55:39
Post Id


Новичок


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


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




Собственно сабж в том что метод невозможно вызвать в теле функции:
PHP:
скопировать код в буфер обмена
  1. require("Data/Base.php"); // эта строка неизменна
  2. // 1 вариант: Работает
  3. print_r($Base->LoadNews()); // получим массив новостей
  4.  
  5. // 2 вариант: Не работает(пс: перевод я знаю, но..)
  6. function A()
  7. {
  8.         print_r($Base->LoadNews());
  9. // Call to a member function LoadNews() on a non-object in
  10. }
  11. A();
  12.  
  13. // 3 вариант: Не работает(ошибка что и во втором)
  14. class Demo
  15. {
  16.         function A()
  17.         {
  18.                 print_r($Base->LoadNews());
  19.         }
  20. }
  21. $Demo = new Demo;
  22. $Demo->A();


Пните в нужную сторону Улыбка
(пс: Base::LoadNews() - не вариант)
(псс: почему не пляшу вокруг первого варианта, а потому-что мне нужен другом метод, но ошибки одинаковые)

(Отредактировано автором: 29 Июня, 2013 - 15:02:03)

 
 Top
esterio
Отправлено: 29 Июня, 2013 - 15:25:15
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




PHP:
скопировать код в буфер обмена
  1. function A()
  2. {
  3. global $Base;
  4.         print_r($Base->LoadNews());
  5. // Call to a member function LoadNews() on a non-object in
  6. }
  7. A();

(Отредактировано автором: 29 Июня, 2013 - 15:25:28)

 
 Top
Voodoo
Отправлено: 29 Июня, 2013 - 15:26:20
Post Id


Новичок


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


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




мм, верно, спасибо
 
 Top
re_nat
Отправлено: 29 Июня, 2013 - 15:27:49
Post Id



Частый гость


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


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




опоздал)))

(Отредактировано автором: 29 Июня, 2013 - 15:28:24)

 
 Top
sup
Отправлено: 29 Июня, 2013 - 15:59:52
Post Id


Гость


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


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




Чтобы не создавать ещё одну тему с таким же названием, спрошу здесь.
Вот код, в таком виде он работает, но меня интересует вот что.
На уровне класса обьявлена переменная $fire, в конструкторе я ей присваиваю значение и далее в функции check() обращаюсь к этой переменной. Но не чего!(
Почему так? я читал про область видимости и про global? но так и не смог не чего с этим сделать...пробовал в конструкторе присваивать значение с указанием глобал - ошибка.
Пытался в функции check() обращаться к глобал - тоже ошибка...как оно тут работает?) Спасибо за помощь!

И ещё хочу спросить ( наверное глупость, смотрел не нашёл ) - статические константы бывают?)
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. /**
  3.  * Created by JetBrains PhpStorm.
  4.  */
  5.  
  6.  
  7. class Main
  8. {
  9.    private $couting;
  10.    private $fire;
  11.  
  12.    public function __construct()
  13.    {
  14.        $fire = new Debug();
  15.        $couting = new Couting();
  16.        $this->check($fire);
  17.    }
  18.    private function check($fire)
  19.    {
  20.        if(file_exists(MainConstans::$CONTENT_DIR))
  21.        {
  22.            $fire->debag('директория "content" существует');
  23.        }
  24.    }
  25. }
  26. class Couting
  27. {
  28.    public function couting_dir()
  29.    {
  30.    }
  31. }
  32. class MainConstans
  33. {
  34.    public static $CONTENT_DIR = 'content';
  35. }
  36. class Debug
  37. {
  38.    protected $firePHP;
  39.  
  40.    public static function debag($value)
  41.    {
  42.        require_once('FirePHPCore-0.3.2/lib/FirePHPCore/FirePHP.class.php4');
  43.        $firePHP = FirePHP::getInstance(true);
  44.        $firePHP->setEnabled(true);
  45.        $firePHP->log($value);
  46.    }
  47. }
  48.    $main = new Main();
  49. ?>

(Отредактировано автором: 29 Июня, 2013 - 16:07:49)

 
 Top
LIME
Отправлено: 29 Июня, 2013 - 16:22:20
Post Id


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


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


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




непонятно что там
sup пишет:
Но не чего!(

во всяком случае
PHP:
скопировать код в буфер обмена
  1. $fire = new Debug();
  2. $this->fire = new Debug();
sup пишет:
статические константы бывают?)
только такие и бывают)))
 
 Top
sup
Отправлено: 29 Июня, 2013 - 16:35:19
Post Id


Гость


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


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




Так тупить только я могу) Сначала создал дебаг статик, а потом забыл и начал вызывать через переменную))) Но эта "непонятность" снова появилась...
В php нет такого, что если создал переменную на уровне класса, а потом присвоив ей значение, оно не становится видно из всего тела класса? Каждый раз надо обьект чтоль создавать заново? У меня создана переменная в классе, в конструкторе присвоенно значение, а потом...запутался...мне нужно в ифе создавать экземпляр Couting ?)
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. /**
  3.  * Created by JetBrains PhpStorm.
  4.  */
  5.  
  6.  
  7. class Main
  8. {
  9.    private $couting;
  10.    private $fire;
  11.    private $const;
  12.  
  13.    public function __construct()
  14.    {
  15.        $couting = new Couting();
  16.        $this->check();
  17.    }
  18.    private function check()
  19.    {
  20.        if(file_exists(MainConstans::CONTENT_DIR))
  21.        {
  22.            Debug::debag('директория "content" существует');
  23.            $this->couting->couting_dir();
  24.        }
  25.        else
  26.        {
  27.            Debug::debag('ДИРЕКТОРИЯ "content" НЕ НАЙДЕНА');
  28.        }
  29.    }
  30. }
  31. class Couting
  32. {
  33.    public function couting_dir()
  34.    {
  35.        Debug::debag('приступаю к подсчёту');
  36.    }
  37. }
  38. class MainConstans
  39. {
  40.    const CONTENT_DIR = 'content';
  41. }
  42. class Debug
  43. {
  44.    protected $firePHP;
  45.  
  46.    public static function debag($value)
  47.    {
  48.        require_once('FirePHPCore-0.3.2/lib/FirePHPCore/FirePHP.class.php4');
  49.        $firePHP = FirePHP::getInstance(true);
  50.        $firePHP->setEnabled(true);
  51.        $firePHP->log($value);
  52.    }
  53. }
  54.    $main = new Main();
  55. ?>

(Добавление)
Цитата:
только такие и бывают)))

Спасибо, просто я думал, что надо -
CODE (htmlphp):
скопировать код в буфер обмена
  1. public static const...
 
 Top
LIME
Отправлено: 29 Июня, 2013 - 16:38:07
Post Id


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


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


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




для танкистов
PHP:
скопировать код в буфер обмена
  1. $couting = new Couting();//локальная переменная внутри метода
  2. $this->couting = new Couting();//переменная объекта
чуешь разницу?
 
 Top
sup
Отправлено: 29 Июня, 2013 - 16:48:48
Post Id


Гость


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


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




Цитата:
чуешь разницу?

Если честно - нет)...я порассуждаю, а Вы поправьте.
это обьект, {} - это его тело.

в его теле я создаю приватную переменную

и вот чтобы в конструкторе присвоить ей значение я должен писать ?
 
 Top
LIME
Отправлено: 29 Июня, 2013 - 16:59:30
Post Id


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


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


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




да
в методах тоже ведь можно использовать локальные переменные
$this->couting и $couting это разные переменные с разными областями видимости
 
 Top
sup
Отправлено: 29 Июня, 2013 - 17:24:16
Post Id


Гость


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


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




LIME Спасибо Вам! У меня есть ещё вопрос - для меня в классах php не понятно то, что они все в одном файле пишутся. Вот это, что значит?
<?php
?>

И я не до конца понимаю ход работы классов.
Для примера :
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. //создаю класс А
  3. class A
  4. {
  5.     //создаю приватную переменную
  6.     private $num;
  7.     //создаём приватную переменную для хранения ссылки на класс В
  8.     private $b;
  9.     //создаю конструктор
  10.     public function __construct()
  11.     {
  12.         //создаём экземпляр класса В
  13.         $this->b = new B();
  14.         //присваиваю приватной переменной значение
  15.         $this->num = 5;
  16.         //вызываю функцию test()
  17.         $this->test();
  18.     }
  19.     private function test()
  20.     {
  21.         //вывожу значение приватной переменной,
  22.         //которой в конструкторе было присвоенно значение
  23.         echo $this->num;//5, благодаря Вам с этим я разобрался
  24.         //передаём значение переменной класса в функцию другого класса
  25.         $this->b->calc($this->num);
  26.     }
  27.     public static function value($value)
  28.     {
  29.         //выводим значение
  30.         echo $value;
  31.     }
  32. }
  33.     //создаю второй класс В
  34. class B
  35. {
  36.     private $save_value;
  37.  
  38.     public function calc($value)
  39.     {
  40.         //сохраняю значение локальной переменной в переменную класса
  41.         $this->save_value = $value;
  42.         $return_value = $value + 5;
  43.         A::value($return_value);
  44.     }
  45. }
  46.     $a = new A();
  47. ?>

И мне не понятно...когда класс В передаст значение в класс А, он занулюет значение сохранённое в переменных уровня класса? Так должен все полностью сбросить...но меня смущает то что они , так сказать - на одном листе написаны)
 
 Top
esterio
Отправлено: 29 Июня, 2013 - 17:37:15
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




sup
А может ну его ето ООП и начнем с самых азов програмирования. В вашем же случае областей видимости переменных.

П.С. Учиться нужно постепенно а не все и сразу

(Отредактировано автором: 29 Июня, 2013 - 17:38:16)

 
 Top
sup
Отправлено: 29 Июня, 2013 - 17:52:49
Post Id


Гость


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


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




Цитата:
П.С. Учиться нужно постепенно а не все и сразу

Согласен! Только не понимаю, что в этом примере, с видимостью не так?
я вообще не против критики - но обоснованной!
я даже прочту те темы в которых говориться о видимости переменных в очередной раз - если вы обоснуете свои замечания!)

(Отредактировано автором: 29 Июня, 2013 - 18:23:59)

 
 Top
LIME
Отправлено: 29 Июня, 2013 - 19:06:07
Post Id


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


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


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




sup если он обоснует ты уже сможешь не читать))
иди читай...двоечник
(Добавление)
тут как бы нечего обосновывать
это элементарные вещи которые надо знать
http://php.net/manual/ru/languag...iables.scope.php
 
 Top
sup
Отправлено: 29 Июня, 2013 - 19:46:20
Post Id


Гость


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


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




LIME Спасибо большое! я вообще не против, почитать!
и тут я писал - писал, что мне конкретно непонятно...но решил, что будет лучше сказать, что - Да! я вообще не чего ещё не знаю)
И честно сказать, для меня в этом языке много странного. Но это делает его изучение, ещё более интересным. И я буду ООооочень рад, если меня будут критиковать и учить!
 
 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