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 :: class php5 использование self и parent
Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008 Откуда: Крым
Помог: 11 раз(а)
Учил сегодня своего подопечного этой всей теме, точней пояснял, что и как работает, т.к. все готово - выложу и другим новичкам, как пример. В книжке сложновато на словах это все понять, а примеры не все любят сами писать и тестировать:
Т.е. в кратком и понятном виде на словах:
parent - вызов метода родительского класса
self - вызов метода текущего класса
Удобно использовать когда в текущем классе и родительском переменные или константы с одним и тем же именем, но в текущем классе нужно использовать значение и одного и другого.
Покинул форум
Сообщений всего: 82
Дата рег-ции: Июнь 2010 Откуда: Харківська обл. с. Криштопівка
Помог: 0 раз(а)
У Вас дважды создан объект Person2, а просто Person не создан. Скрипт выводит 11 заместо 12.
Подскажите, плиз, следующее:
1. Вызов внутри класа с помощью "self::" аналогичен до "$this->" или нет?
2. Зачем вообще нужен "static" при объявлении свойств или методов?
3. Есть ли разница когда объявить объект со скобками и без них типа:
$person = new Person()
или
$person = new Person
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
like_you пишет:
1. Вызов внутри класа с помощью "self::" аналогичен до "$this->" или нет?
2. Зачем вообще нужен "static" при объявлении свойств или методов?
второй вопрос это ответ на первый.
Если обьявить метод static то его можно использовать через self::method()
like_you пишет:
3. Есть ли разница когда объявить объект со скобками и без них типа:
Да есть. При создании обьекта ему сразу можно передать параметры. При создании обьекта php ищет метод __construct() если его нету то ещёт метод с название как у класа. Например.
$object=new test('Мы создали обьект с параметром');// выведет текст
// или так
$object=new test;// просто создаёт обьект. Ничего не выводит.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
like_you
Отправлено: 30 Ноября, 2010 - 02:24:35
Гость
Покинул форум
Сообщений всего: 82
Дата рег-ции: Июнь 2010 Откуда: Харківська обл. с. Криштопівка
Помог: 0 раз(а)
по поводу того, о чём я писал предыдущем оф-топике:
наверное, в коде самого первого сообщения даной темы, достаточно было объявить один объект и вызывать методы, примерно вот так
И у меня добавились ещё вопросы в тему:
1. Когда целесообразнее использовать "$this->" и почему в некоторых случаях нужен "static" (и уже с ним "self::" ). Что меняет "static"? Мне показалось, что он управляет видимостью свойств и методов типа как модификатор доступа, но для этого же есть "public, protected, private";
2. Объекту нужны скопки при объявлении только в случаи если задавать параметр, тоесть при использовании метода-конструктор? А если просто пустые скобки без параметра это тоже самое, что объявить объект вообще без них?
3. Неужели роль конструктора в ООП пхп ограничивается только одновременной передачей параметра методу вместе с объявлением объекта?
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Ой, ой.. При обьявлении в каком либо классе чего либо статического он автоматически становится абстрактным и созданию не подлежит. Поэтому в нем самом будет работать только self::, а в его потомках используют parent::
Можно конечно написать вместо parent:: написать Person:: но если имя класса слишком длинное, то короче писать parent::
Покинул форум
Сообщений всего: 305
Дата рег-ции: Июнь 2009
Помог: 0 раз(а)
like_you пишет:
по поводу того, о чём я писал предыдущем оф-топике:
наверное, в коде самого первого сообщения даной темы, достаточно было объявить один объект и вызывать методы, примерно вот так
И у меня добавились ещё вопросы в тему:
1. Когда целесообразнее использовать "$this->" и почему в некоторых случаях нужен "static" (и уже с ним "self::" ). Что меняет "static"? Мне показалось, что он управляет видимостью свойств и методов типа как модификатор доступа, но для этого же есть "public, protected, private";
2. Объекту нужны скопки при объявлении только в случаи если задавать параметр, тоесть при использовании метода-конструктор? А если просто пустые скобки без параметра это тоже самое, что объявить объект вообще без них?
3. Неужели роль конструктора в ООП пхп ограничивается только одновременной передачей параметра методу вместе с объявлением объекта?
$this->... используется всегда для обращения к собственным свойствам и методам.
static - объявление статической функции или статической переменной.
Отличие от обычной состоит в том, что статическая переменная принадлежит всему классу, а не некому экземпляру класса(объекту).
Если один объект поменяет свою статическую переменную, то она поменяется для всех объектов данного класса.
На практике, иногда такие переменные используются как счетчики числа созданных объектов.
Статическая функция - функция которую можно вызвать через класс, не создавая экземпляра объекта.
OrmaJever
Отправлено: 30 Ноября, 2010 - 10:45:54
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
like_you пишет:
2. Объекту нужны скопки при объявлении только в случаи если задавать параметр, тоесть при использовании метода-конструктор? А если просто пустые скобки без параметра это тоже самое, что объявить объект вообще без них?
нет. Ну это так же как и вызвать простую функцию, можно с параметрами а можно и без.
Если вызывать без скобок то просто создаст обьект, а если со скобками то будет вызыватся метод __construct()
Например
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
like_you пишет:
Вызов внутри класа с помощью "self::" аналогичен до "$this->" или нет?
В общем случае использование конструкций с указанием идентификатора класса в качестве текущего пространства имен в виде class:: или внутреннего квалификатора self:: - в действительности является дифференциированной грамматической конструкцией по сравнению с локальной ссылкой $this - для проверки факта которого достаточно использованя пользовательской функции переопределения обращения к параметру экземпляра класса
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.