Группировка по агрегациям. В вашем запросе нет агрегации. Вы просто хотите, чтобы ваш вывод был отсортирован. В этом случае Order By хорошо подходит для этой цели.
select * from table1
order by city, customer
На английском языке все данные таблицы1 отсортированы по первому городу, затем по клиенту
$this к объекту, в контексте которого назвали метод. Так: $this является $a-> getName (), $a. $this в $fooInstance-> getName () был бы $fooInstance. В случае, что $this установлен (в объектном вызове метода $a's) и мы называем статический метод, $this остается присвоенным $a.
Кажется, что довольно много беспорядка могло выйти из использования этой функции.:)
При вызове статического метода связанным с другим объектом метод выполняется в контексте текущего объекта. Который предоставляет доступ к $this-object.
Лучший способ назвать метод суперкласса из подкласса был бы:
parent::getName();
Нечто:: getName () использует более старый стиль PHP4 оператора разрешения области видимости, чтобы позволить переопределенному методу быть названным.
В PHP5 Вы использовали бы родителя:: getName () вместо этого
Полезно, если Вы хотите расширить, вместо того, чтобы полностью переопределить поведение базового класса, например, это могло бы сделать это более ясным
class Bar extends Foo {
public $name = 'John';
public function getName() {
echo "My name is ";
parent::getName();
}
}
Когда Вы звоните $a->getName()
Вы ссылаетесь на конкретный объект, $a
, который имеет класс Bar
и так возвращает "John".
Foo::getName()
не допустимо вне функции, потому что нет никакого конкретного объекта.
Я не уверен, что это работает в PHP, но если Вы бросаете объект к суперклассу как в (Foo)$a->getName()
затем Вы получили бы "Andrew" как свой результат. Вы все еще говорили бы о конкретном объекте ($a
) но в этом случае типа Foo
. (Обратите внимание, что Вы обычно не хотели бы делать это),
Иногда программисты лучше в объяснении вещей в коде, чем на английском языке!
Первой вещью, продолжающейся вот, является понятие перегрузки. При инстанцировании Панели это - 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."
Очевидно это - очень узкий пример, но он иллюстрирует тезис.
Ваш базовый класс является самой общей реализацией Типа. В этом случае это - "Собака". Вы хотите поместить информацию в этот базовый класс, который характерен для всех экземпляров того Типа. Это предотвращает дублирование в каждом из Производных классов (как "Пропуск").
Ваш сценарий использует в своих интересах эту функцию, возможно, непреднамеренно.