- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
<?php
class A
{
public function TestFunc()
{
var_dump($this);
return $this->test;
}
}
class B
{
public $test;
public function __construct()
{
$this->test = "Nice trick";
}
public function GetTest()
{
return A::TestFunc();
}
}
$b = new B;
echo $b->GetTest();
Зачем это всё?
Отсылка к сказке про Змея Горыныча?
Минуточку, это не рыцарские доспехи. Конический шлем издревле был у славян, с него соскакивали лезвия. Хм. А меч напоминает греческий.
Совместимость: «Трубопаскакаль», «Дельфи», «Фрипаскаль».
Всё работает, всё всем платится:
http://ideone.com/VFOWMv
К сожалению, пришлось наследовать A от B. Можно попытаться без наследования, но тогда код будет совсем царским и сможет в любой момент бабахнуть.
С виртуальными была бы жопа: пришлось бы разыскивать метод TestFunc в VMT, а его там у объекта B быть не должно.
https://freepascal.org/docs-html/current/ref/refse31.html
Then the following 3 calls are equivalent:
pp := new (Pobj,Init);
and
new(pp,init);
and also
new (pp);
pp^.init;
В документации по «TP» и по «Delphi» второй параметр тоже упоминался.
Каждый класс имеет фабричный метод Creatе, возвращающий ссылку на созданный экземпляр класса с типом TObject. Инициировать объекты как либо иначе запрещено. Если же ты откроешь модуль system.pas, то увидишь, что методы класса TObject "Create" и "Destroy" вообще не реализованы - это тупо сахар.
В «C++» есть только ключевое слово «class». В «Турбо Паскале» было только ключевое слово «object».
Некоторые программисты словом «класс» называют тип данных, а словом «объект» — конкретный экземпляр класса. Но полагаться на то, что собеседник использует именно такую терминологию, нельзя. Лучше явно уточнять, что имеется в виду тип или экземпляр.
*****
Теперь про слова «class» и «object» в языке «Object Pascal» («Delphi», «Free Pascal»).
Экземпляры объекта, описанного ключевым словом «object» можно создавать в стеке (в области локальных переменных функции), можно в секции данных (в области глобальных переменных) и можно в куче (в этом случае их можно явно уничтожать). Стандартных конструкторов и деструкторов нет, ты их должен объявлять явно. Такие экземпляры можно передавать по значению и по указателю.
Экземпляры объекта, описанного ключевым словом «class», создаются диспетчером памяти стандартной библиотеки (system.pas). Программист не может управлять местом их хранения. Такие объекты в числе своих предков обязательно имеют TObject, поэтому у них всегда есть методы Create и Destroy. Экземпляры же всегда передаются по ссылке — это сахар, который выглядит как значение, но на самом деле является указателем.
Если я правильно понял, в нём объектом называется анонимный класс. Используется, когда нужно объявить и тут же получить экземпляр.
Но мне интересно, зачем тебе столько петухов, ведь все знают, что за ними один ты.
Просто сделай это.
Работает:
http://ideone.com/W74P5V
Осталось придумать, что делать, когда есть виртуальные методы.
Именно поэтому я против "PHP"