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]   

> Без описания
Golovastik
Отправлено: 03 Июля, 2010 - 01:02:43
Post Id


Гость


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


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




На яве для вызова конструктора суперкласса используют ключевое слово super, пробую на пхп практиковать не выходит.
Вот код на Java рабочий
CODE (text):
скопировать код в буфер обмена
  1.  
  2. package u;
  3.  class A{
  4. private int a,b,c;
  5. A(){}
  6. A(int x1, int y1, int z1){
  7.     a = x1; b = y1; c = z1;
  8.  }
  9.  
  10.  
  11. void result(){
  12.    System.out.println(a*b*c);
  13. }
  14. }
  15.  
  16.  class B extends A{
  17.     B(){}
  18.     B(int s1, int s2, int s3){
  19.         super(s1,s2,s3);
  20.     }
  21. }
  22.  
  23. public class Main {
  24.     public static void main(String[] args) {
  25.      B obj = new B(5,7,9);
  26.      obj.result();
  27.     }
  28. }
  29.  
  30.  


На пхп застряло на 15 строке и не идёт:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. class Base {
  4.  
  5. private  $a, $b, $c;
  6. function Base($x, $y, $z){
  7.     $a = $x; $b = $y; $c = $z;
  8. }
  9.  function result(){
  10.     echo $a*$b*$c;
  11.  }
  12. }
  13.  
  14. class B extends Base {
  15.   function B($w1,$w2, $w3){
  16.   super($w1,$w2,$w3);  
  17.   }
  18.  }
  19.  
  20. $obj = new B;
  21. $obj->result();
  22.  
  23. ?>
  24.  
  25.  
 
 Top
Nestor
Отправлено: 03 Июля, 2010 - 02:23:23
Post Id



Частый гость


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


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




функции super, насколько я помню, нет.
попробуй вызвать через parent::__construct()


-----
Aurus CMS
 
 Top
JustUserR
Отправлено: 03 Июля, 2010 - 02:40:42
Post Id



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


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


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




Golovastik пишет:
На пхп застряло на 15 строке и не идёт:
В PHP концепции и элементы объектно-ориентированного программирования активно используются - однако его реализация не является такой полной как например в языке Java В частности в PHP для доступа к полям и функциям текущего класса можно использовать как конструкцию self::field так и $this->field - то есть класс и объект являющийся экземпляром класса не разделены в коде описания класса полностью Видимо такой синтаксис заимствован из C++ где его использование реально оправдано - что можно увидеть к примеру при просмотре генерируемого C-кода - поскольку свойства класса там на самом деле являются свойствами одноименной структуры а функции находятся отдельно от объекта с пространстве имен совпадающем с именем класса


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Golovastik
Отправлено: 03 Июля, 2010 - 11:41:46
Post Id


Гость


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


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




Вот так не работает.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. class Base {
  4.  
  5. private  $a, $b, $c;
  6. function Base($x, $y, $z){
  7.     $this->a = $x; $this->b = $y; $this->c = $z;
  8. }
  9.  function result(){
  10.     echo $this->a*$this->$b*$this->c;
  11.  }
  12. }
  13.  
  14. class B extends Base {
  15.   function B($w1,$w2, $w3){
  16.   parent::__constructor($w1,$w2,$w3);
  17.   }
  18.  }
  19.  
  20. $obj = new B;
  21. $obj->result(1,2,3);
  22.  
  23.  
 
 Top
movEAX
Отправлено: 03 Июля, 2010 - 13:11:41
Post Id



Частый посетитель


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


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




Golovastik пишет:
parent::__constructor($w1,$w2,$w3);

Не __constructor, а __construct

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



-----
армия.. самое убогое место
 
 Top
Golovastik
Отправлено: 03 Июля, 2010 - 17:44:33
Post Id


Гость


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


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




Хоть вот эту строку и понял как использовать но не понял что означает вот это выражение.
PHP:
скопировать код в буфер обмена
  1.  
  2.  parent::__construct($w1,$w2,$w3);
  3.  

parent - это класс языка пхп как я понял.
__construct - это область видимости метода в этом классе?
 
 Top
alexspb
Отправлено: 03 Июля, 2010 - 19:27:07
Post Id


Посетитель


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


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




на месте
PHP:
скопировать код в буфер обмена
  1. function Base($x, $y, $z){
  2.     $a = $x; $b = $y; $c = $z;
  3. }

и должен быть __construct()

PHP:
скопировать код в буфер обмена
  1. __construct($x, $y, $z){
  2.     $this->a = $x; $this->b = $y; $this->c = $z;
  3. }


имя класса и конструктора совпадало в РНР4, в РНР5 - __construct()


-----
Хостинг - неограниченно доменов на одну папку
Ajax - отличное введение
 
 Top
mako
Отправлено: 03 Июля, 2010 - 21:41:20
Post Id


Новичок


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


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




alexspb пишет:
Хоть вот эту строку и понял как использовать но не понял что означает вот это выражение.

parent:: -- обращение к методу родительского класса

__construct() -- функция которая вызывается при создании экземпляра класса.
Другими словами:
CODE (htmlphp):
скопировать код в буфер обмена
  1. parent::__construct();

"Автоматически вызвать функцию __construct родительского класса при создании обьекта этого класса"
 
 Top
JustUserR
Отправлено: 04 Июля, 2010 - 02:08:15
Post Id



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


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


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




Golovastik пишет:
Хоть вот эту строку и понял как использовать но не понял что означает вот это выражение.
Если вы используете PHP4-нотацию для записи конструктора в классе - то соответствующий вызов будет выглядеть как parent::Base()
Golovastik пишет:
Parent - это класс языка пхп как я понял.
__construct - это область видимости метода в этом классе?
В PHP для классов реализовано только единственное наследование - и parent означает просто доступ к функциям базового класса Что касается областей видимости то ситуация в PHP по этому вопросу складывается еще более интересная По умолчанию в PHP присутствует только глобальная и локальная область видимости причем глобальная область является межпакетной - и нет в наличии стандартных пакетных или именнованных пространств имен - но тем не менее имя класса и оператор расширения области видимости могут использоваться для эмуляции пространств имен - в частности с помощью пакета runkit можно добиться получения собственных динамических пространств имен
Если рассматривать синтаксис вызова методов внутри класса то можно заметить что он несколько необычен для PHP - и причиной этого является того что фукнции в PHP ранее не были объектами первого рода Дело в том что обычная переменная может быть или глобальной и тогда для получения к ней используется ключевое слово global - или локальной и в таком случае она существует внутри определенной фукнции по правилу перекрытия В то же время все функции первоначально находились в глобальной области - и поэтому могут вызываться из нее без всяких ключевых слов - но с появлением классов потребовалась необходимость обращаться к его функциям определенным образом - и так как синтаксис простого вызова уже был занят глобальными функциями то для этой цели стали использовать оператор расширения области видимости по имени классу Казалось бы что с переменными находящимися внутри класса такой проблемы не было и их можно было бы использовать без всякого префикса - однако они используются фактически не внутри класса а внутри его методов которые сами могут содержать локальные переменные - и по этой причине а также для логического объединения свойств и методов класса стал использоваться такой синтаксис То есть по сути класс можно рассматривать как набор переменных и функций внутри определенного пространства имен - которое существует наряду с глобальным пространством и подчиняется таким же правилам


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 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