2012-03-01 2 views
3

Я ищу способ расширения класса PHP для добавления настраиваемого метода. В частности, я хочу добавить метод date-format в MongoDate (из драйвера PHP MongoDB).PHP - добавление метода в класс

Я просто подумал, что было бы намного чище, если объект MongoDate, полученный от Mongo collectio, предоставляет способ сделать его читаемым и не требует вызова функции или класса для этого.

$d = new MongoDate(); 

some_date_format($d); // the way it works now 

$d->format(); // the way it would be cleaner 

Есть ли решение?

+0

Читайте на [наследование php-объектов] (http://php.net/manual/en/language.oop5.inheritance.php) :-) –

+0

То же самое здесь, я хочу, чтобы объект получил от MongoCollection :: find(); 'также будут затронуты. Это работает, если я просто отбросил MongoDate, полученный от поиска, в мой новый класс? –

+1

Здесь может быть более подходящим шаблон адаптера. Проверьте это: http://c2.com/cgi/wiki?AdapterPattern – MitMaro

ответ

5

Наследовать от этого!

class myClass extends MongoDate{ 
    public function format(){ 
    } 
} 

Тогда просто реализовать:

$d = new myClass(); 

some_date_format($d); // the way it works now 

$d->format(); // the way it would be cleaner 
+0

Я думал об этом, но это не повлияет на объект, который я получаю от 'MongoCollection :: find();' –

+0

У вас есть синтаксические ошибки. –

+0

@ PhilippSpieß вы должны действительно поставить то, что вы пробовали, и как оно вышло в вашем вопросе. Таким образом, люди будут знать, как помочь вам лучше. Это, пожалуйста, напишите реальный код, и мы рассмотрим его и помогите. – Iznogood

2

удлиняет его. Это основной принцип ООП.

class NewClass extends MongoDate { 
    public function newFunction(){ 
     //Stuff here. 
    } 
} 

Это будет определять новый класс NewClass который наследует все открытые и защищенные свойства и методы от старого MongoDate класса, а также будет иметь функцию newFunction() включена.

0

Вы не можете изменить, какой тип возвращает драйвер PHP для дат, поэтому lznogood & Ответ на истину - это лучшее, что вы можете сделать.

Смежные вопросы