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]   

> Без описания
Сайга-12
Отправлено: 09 Марта, 2014 - 21:14:05
Post Id



Гость


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


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




Пытался в дочернем использовать "$this->[Родительская переменная]", - не получается.
В родительском, переменные, которые должны быть использованы в дочернем, объявлены как "public".
Что делать. Помогите, пожалуйста.
(Добавление)
Или покажите, пожалуйста, рабочий пример.
 
 Top
caballero
Отправлено: 09 Марта, 2014 - 22:04:11
Post Id


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


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


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




в как ты определяешь получил ты ее или нет?


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
OrmaJever Модератор
Отправлено: 09 Марта, 2014 - 22:10:05
Post Id



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


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


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




caballero пишет:
в как ты определяешь получил ты ее или нет?

как я понял он всё правильно спрашивает. Нужно получить переменную родительского класса в потомке.
Сайга-12 пишет:
ли покажите, пожалуйста, рабочий пример.

PHP:
скопировать код в буфер обмена
  1. class A {
  2.   public $a; // или protected
  3. }
  4.  
  5. class B extends A {
  6.  
  7.     public function getA() {
  8.         return $this->a;
  9.     }
  10. }

это конечно будет работать при условии что в классе В нету свойства "а", если есть то нужно вызывать так parent::$a


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Сайга-12
Отправлено: 09 Марта, 2014 - 22:52:26
Post Id



Гость


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


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




А если нет, то всё-равно, можно ли инициировать переменную заранее тем же методом? parent::$a.
 
 Top
OrmaJever Модератор
Отправлено: 09 Марта, 2014 - 22:56:31
Post Id



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


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


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




можно


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Сайга-12
Отправлено: 09 Марта, 2014 - 23:09:32
Post Id



Гость


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


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




Спасибо большое.
У меня есть еще один вопрос. Думаю, вопрос очень хороший. На него я не смог найти даже намёка.
Есть ли функция обратная от get_class().
Т.е. Функция, которая возвращает имена объектов определённого класса?
 
 Top
OrmaJever Модератор
Отправлено: 09 Марта, 2014 - 23:31:21
Post Id



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


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


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




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


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Сайга-12
Отправлено: 09 Марта, 2014 - 23:39:56
Post Id



Гость


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


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




А можно как нибудь отследить переменные, которые могут иметь отношение к классам (можно к любым)? Думаю, если это возможно, то можно посредством проверки объекта, узнать, принадлежит ли объект к нужному классу или нет.
(Добавление)
Так, нашёл is_object(), которая проверяет, является ли переменная объектом. Можно конечно, получить все пользовательские переменные, и проверить их. Но думаю, это будет слишком ресурсозатратным... Думаю, может это не единственный способ...
(Добавление)
PHP:
скопировать код в буфер обмена
  1.         $Object = get_defined_vars();
  2.         foreach ($Object as $key => $value) {
  3.                 if (is_object($$key)) echo "Найден объект: ".$key."<br />";
  4.         }

Как думаете, ресурсозатратный код?
 
 Top
DelphinPRO
Отправлено: 10 Марта, 2014 - 00:27:08
Post Id



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


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


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




Сайга-12 пишет:
посредством проверки объекта, узнать, принадлежит ли объект к нужному классу или нет.


PHP:
скопировать код в буфер обмена
  1. class OneClass {}
  2. class TwoClass {}
  3.  
  4. $object = new OneClass();
  5.  
  6. if ($object instanceof OneClass) {
  7.     echo '$object принадлежит классу OneClass';
  8. }
  9. if ($object instanceof TwoClass) {
  10.     echo '$object принадлежит классу TwoClass';
  11. }


(Добавление)
Если вам нужно подсчитывать объекты некоего класса, то лучше это самому реализовать в искомом классе

PHP:
скопировать код в буфер обмена
  1. class MyClass() {
  2.   public static $instances = array();
  3.  
  4.   public static function Create() {
  5.     self::$instances[] = new self();
  6.   }
  7.   private function __construct() {
  8.     // закроем конструктор, чтобы объект нельзя было создать напрямую
  9.     // а только через метод Myclass::Create();
  10.   }
  11. }
  12.  
  13. $obj1 = MyClass::Create();
  14. $obj2 = MyClass::Create();
  15. $obj3 = MyClass::Create();
  16.  
  17. echo 'Создано ' . count(MyClass::$instances) .' объектов класса MyClass';


ну и дальше по аналогии...

(Отредактировано автором: 10 Марта, 2014 - 00:32:27)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Сайга-12
Отправлено: 10 Марта, 2014 - 01:58:04
Post Id



Гость


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


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




У меня еще один вопрос. Думаю, тоже сложный.
Представьте, есть родительский и дочерний класс. Можно ли создать дочерний объект от родительского объекта? Т.е. не от самого родительского класса, а именно от его объекта?
 
 Top
EuGen Администратор
Отправлено: 10 Марта, 2014 - 13:09:37
Post Id


Профессионал


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


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




Сайга-12 пишет:
Можно ли создать дочерний объект от родительского объекта? Т.е. не от самого родительского класса, а именно от его объекта?

Объект - это экземпляр класса. Отношения же наследования задаются на уровне структуры, то есть класса. "Наследник объекта" не имеет никакого смысла.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 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