Вызов Статического метода от Класса B (который расширяет Класс A) Класса A

Группировка по агрегациям. В вашем запросе нет агрегации. Вы просто хотите, чтобы ваш вывод был отсортирован. В этом случае Order By хорошо подходит для этой цели.

select * from table1 
order by city, customer

На английском языке все данные таблицы1 отсортированы по первому городу, затем по клиенту

5
задан Mike B 5 February 2009 в 18:36
поделиться

5 ответов

$this к объекту, в контексте которого назвали метод. Так: $this является $a-> getName (), $a. $this в $fooInstance-> getName () был бы $fooInstance. В случае, что $this установлен (в объектном вызове метода $a's) и мы называем статический метод, $this остается присвоенным $a.

Кажется, что довольно много беспорядка могло выйти из использования этой функции.:)

2
ответ дан 18 December 2019 в 12:02
поделиться

При вызове статического метода связанным с другим объектом метод выполняется в контексте текущего объекта. Который предоставляет доступ к $this-object.

Лучший способ назвать метод суперкласса из подкласса был бы:

parent::getName();
4
ответ дан 18 December 2019 в 12:02
поделиться

Нечто:: getName () использует более старый стиль PHP4 оператора разрешения области видимости, чтобы позволить переопределенному методу быть названным.

В PHP5 Вы использовали бы родителя:: getName () вместо этого

Полезно, если Вы хотите расширить, вместо того, чтобы полностью переопределить поведение базового класса, например, это могло бы сделать это более ясным

class Bar extends Foo {
    public $name = 'John';

    public function getName() {
        echo "My name is ";
        parent::getName();
    }
}
7
ответ дан 18 December 2019 в 12:02
поделиться

Когда Вы звоните $a->getName() Вы ссылаетесь на конкретный объект, $a, который имеет класс Bar и так возвращает "John".

Foo::getName() не допустимо вне функции, потому что нет никакого конкретного объекта.

Я не уверен, что это работает в PHP, но если Вы бросаете объект к суперклассу как в (Foo)$a->getName() затем Вы получили бы "Andrew" как свой результат. Вы все еще говорили бы о конкретном объекте ($a) но в этом случае типа Foo. (Обратите внимание, что Вы обычно не хотели бы делать это),

1
ответ дан 18 December 2019 в 12:02
поделиться

Иногда программисты лучше в объяснении вещей в коде, чем на английском языке!

Первой вещью, продолжающейся вот, является понятие перегрузки. При инстанцировании Панели это - getName (), метод перегружает метод того же имени в Foo.

Перегрузка является мощной и важной частью OOD.

Однако часто полезно смочь назвать версию метода, который существует в Родительском классе (Нечто).

Вот пример:

class Dog
{
   public function getTag()
   {
      return "I'm a dog.";
   }
}

class Skip extends dog
{
   public function getTag()
   {
      return Dog::getTag() . " My name is Skip.";
      // I'm using Dog:: because it matches your example. However, you should use parent:: instead.
   }
}

$o = new Skip();
echo $o->getTag(); // Echo's: "I'm a dog. My name is Skip."

Очевидно это - очень узкий пример, но он иллюстрирует тезис.

Ваш базовый класс является самой общей реализацией Типа. В этом случае это - "Собака". Вы хотите поместить информацию в этот базовый класс, который характерен для всех экземпляров того Типа. Это предотвращает дублирование в каждом из Производных классов (как "Пропуск").

Ваш сценарий использует в своих интересах эту функцию, возможно, непреднамеренно.

1
ответ дан 18 December 2019 в 12:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: