2010-06-25 2 views
1

Я хочу продлить, а не просто создать новый экземпляр класса, который у меня есть в каталоге моих поставщиков. Я googled и прочитал документы, но я не вижу никакой поддержки для этого.Как мне расширить сторонние классы в cakephp?

Могу ли я выполнить импорт приложения стороннего класса, а затем написать расширенный класс, за которым следует компонент, который будет использовать мой дочерний класс?

т.е.

/* vendors/yahooapi/yahoo.class.php */ 
class YahooAPI { 
    var $key = 'demo'; 
} 

/* controllers/components/yahoo.php */ 
App::import("Vendor", "YahooAPI", array("file"=>"yahooapi.class.php")); 

class Yahoov2 extends YahooAPI { 
    var $key = 'newKey'; 
    function go() {} 
} 

YahooComponent extends Object { 
    function goFaster() { 
     $a = new Yahoov2; 
     return $a->go() * 2; 
    } 

}

+0

В CakePHP все еще есть PHP, и это должно работать отлично. У вас есть конкретная проблема? – deceze

+0

нет, просто хотел удостовериться, что я не делаю этого длинным путем или чем-то, что противоречит стандартам пирога. Спасибо! –

ответ

1

В принципе, я расскажу вам, как я бы это сделать (по крайней мере, я сделал это в некоторых проектах):

1 добавить к поставщикам поставщика /yahooapi/yahoo.class.php, как вы сделали

2 создайте файл внутри поставщиков/yahooapi/или снаружи в вендорах/который расширит исходный класс поставщика, скажем, поставщиков/yahoov2.php т.е.

include_once('.../vendors/yahooapi/yahoo.class.php'); 
class Yahoov2 extends YahooAPI { 
var $key = 'newKey'; 
function go() {} 
} 

3 И, наконец, включить в компонент вашего расширения, как вы делали в вашем контроллере.

Я считаю, что также расширение класса в вашем контроллере прямо сделало бы работу, но это действительно вопрос вкуса.

+0

Если вы можете получить 'App :: import', работающий для вашего файла, тогда отлично, иначе - как отмечает deceze - вы всегда можете вернуться к простому PHP, как показано на примере Nik. – deizel

+0

Я бы согласился с тем, что App :: import - больше стиля Cake, но я не уверен, что App :: import будет работать в Vandors. Что я делал в прошлом - это делать App :: import ('Vendor', 'core_vendor'); App :: import ('Vendor', 'ext_vendor'); В компоненте. Это действительно вопрос вкуса :) –

+0

К тому времени, когда файл поставщика загружается, класс 'App' уже давно загружен и может использоваться где угодно. По возможности я бы пошел с «App :: import», так как он оставляет вам немного больше гибкости при перемещении файлов. – deceze

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

  • Нет связанных вопросов^_^