В PHP вы используете ключевое слово self для доступа к статическим свойствам и методам.
Проблема в том, что вы можете заменить $this->method()
на self::method()
где угодно, независимо от того, объявлено ли method()
как статическое или нет. Итак, какой из них использовать?
Рассмотрим этот код:
class ParentClass {
function test() {
self::who(); // will output 'parent'
$this->who(); // will output 'child'
}
function who() {
echo 'parent';
}
}
class ChildClass extends ParentClass {
function who() {
echo 'child';
}
}
$obj = new ChildClass();
$obj->test();
В этом примере self::who()
всегда будет выводить «parent», тогда как $this->who()
будет зависеть от того, какой класс объект имеет.
Теперь мы можем видеть, что self относится к классу, в котором оно вызывается, тогда как $this
относится к классу текущего объекта .
Таким образом, вы должны использовать self только тогда, когда $this
недоступно или когда вы не хотите, чтобы классы-потомки перезаписывали текущий метод.
Это не совсем то, что вы ищете, но в PostgresSQL Wiki есть интересный раздел об экспорте XML, в котором описывается, как они поддерживают SQL и XML вместе. Он отображает раздел о том, как таблица будет экспортирована в виде XML и XSD, который будет ее поддерживать, что выглядит довольно общим. Он может служить вам моделью для создания своего собственного.
В Wiki говорится о ссылке на стандарт ISO / IEC 9075-14: 2006, который, похоже, принят несколькими крупными поставщиками в качестве основы. Я быстро просматриваю сайт ISO, где говорится, что: 2006 год был обновлен до 2008 года. Я уверен, что вы можете найти покрытую спецификацию этого, чего вы не делаете.
Интересная проблема - я не знаю ни одного стандарта или инструмента для достижения этой цели.
Вам почти понадобится какая-то «нейтрализованная» версия с переходниками для каждого отдельная система базы данных, на которую вы хотите ориентироваться - даже просто для отображения всех различных типов данных (VARCHAR и NVARCHAR в SQL Server, VARCHAR2 в Oracle и т. д.).
Вы можете просто использовать типы, определенные в стандарте SQL: 2003 - но даже тогда вам, вероятно, все равно придется иметь какое-то сопоставление / адаптацию, зависящее от поставщика. Не говоря уже о некоторой поддержке деталей реализации, зависящих от производителя (например, столбцы IDENTITY в SQL Server по сравнению с SEQUENCE в Oracle и др.)
Очень интересный вопрос! Я надеюсь, что другие смогут пролить больше света на проблему и, возможно, порекомендовать существующий инструмент.
Если нет, то и вы решаете применить свой собственный - подумайте о том, чтобы сделать его открытым на CodePlex или Google Code! Я уверен, что многим будет интересно!
MArc
Возможно, стоит попробовать спецификацию метамодели управления информацией UML (IMM) от OMG.