Форум → Программирование → PHP для идиотов → PHP и ООП → Делегирование
Делегирование
Страницы: ← Предыдущая страница • Следующая страница →
-
30 сентября 2008 г. 19:09, спустя 6 минут 11 секунд
https://smappi.org/ - платформа по созданию API на все случаи жизни -
-
30 сентября 2008 г. 19:16, спустя 3 минуты 35 секунд
он мну азадачил
я вечером издому отпишу
Было бы неплохо. -
30 сентября 2008 г. 19:46, спустя 30 минут 15 секунд
http://ru.php.net/manual/ru/language.oop5.overloading.php
Это тут не катит. Сделали же эту фигню разработчики CI, а он для PHP4. В нём нет этих фич. -
30 сентября 2008 г. 22:33, спустя 2 часа 46 минут 31 секунду
решил задачку просто
error_reporting(E_ALL);
class Hello{
public function write(){
echo "hello world";
}
}
class Loader{
private $parent;
public function __construct($parent){
$this->parent = $parent;
}
public function load($name){
$this->parent->$name = new $name();
}
}
class Test{
private $loader;
public function __construct(){
$this->loader = new Loader($this);
$this->loader->load("Hello");
}
public function write(){
$this->Hello->write();
}
}
$t = new Test();
$t->write();
тока тут рекурсия получаеться не знаю насколько это хорошо с точки зрения выделения памяти -
-
30 сентября 2008 г. 22:57, спустя 9 минут 39 секунд
CTAPbIu_MABP, уверен что это соответствует задаче aivee?
На сколько я понял он хотел:
1. Инициализировать объект произвольного класс с помощью класса Loader
2. Обращаться к методам инициализированного объекта
$load = new Loader('RunQuery');
$load->RunQuery->query('select * from `table`');
Типа того…https://smappi.org/ - платформа по созданию API на все случаи жизни -
30 сентября 2008 г. 23:10, спустя 13 минут 32 секунды
adw0rd, последний пост на второй страницеНапример, загружаем библиотеку Parser:
$this->load->library('Parser');
Теперь вызываем её:$this->Parser->parse('текcт');
-
30 сентября 2008 г. 23:34, спустя 23 минуты 8 секунд
CTAPbIu_MABP, а… точноhttps://smappi.org/ - платформа по созданию API на все случаи жизни -
1 октября 2008 г. 2:02, спустя 2 часа 28 минут 41 секунду
ну шо отцы коментируйте
Как то сложно, вы это не думаете????
<?php
class Toolkit
{
protected static $instance;
protected $signatures;
private function __construct() {}
public static function Instance()
{
if(!self::$instance)
self::$instance = new Toolkit();
return self::$instance;
}
public function SetUp( $tools = null )
{
$this->NulledSignatures();
if ($tools != null) $this->LoadSignatures($tools);
}
public function Extend( $tools )
{
$this->LoadSignatures($tools);
}
protected function LoadSignatures($tools)
{
$tools_instance = is_object($tools) ? $tools : new $tools;
if(is_a($tools_instance,'iTools'))
{
$methods = $tools_instance->getSignatures();
foreach ($methods as $method)
$this->signatures[$method] = $tools_instance;
}else{
$class_tools = new ReflectionClass($tools);
$methods = $class_tools->getMethods();
foreach ($methods as $method)
{
if($method->isPublic()) $this->signatures[$method->getName()] = $tools_instance;
}
}
}
protected function NulledSignatures()
{
$this->signatures = array();
}
public function __call($func,$args)
{
if(isset($this->signatures[$func]))
{
return call_user_func_array(array($this->signatures[$func],$func),$args);
}else{
throw new Exception('Method ' . $func .' not found in tools ');
}
}
}
?> -
1 октября 2008 г. 2:04, спустя 2 минуты 15 секунд
Ну и тесты для примера
<?php
class TestToolkit extends UnitTestCase
{
protected $toolkit;
public function SetUp()
{
$this->toolkit = Toolkit::Instance();
}
public function TearDown()
{
$this->toolkit->SetUp();
}
public function TestToolkitInstance()
{
$this->assertIdentical($this->toolkit, Toolkit::Instance());
}
public function TestSetupObjectWithoutInterfaceITools()
{
$this->toolkit->Setup('TstObjectWithOutInterfaceTools');
$this->MethodWithoutInterfaceTest();
$this->privateMethodTest();
}
public function TestSetupObjectWithInterfaceTools()
{
$this->toolkit->Setup('TstObjectWithInterfaceTools');
$this->assertEqual('TstObjectWithInterfaceTools::TstPublicFunc',$this->toolkit->TstPublicFunc());
$this->privateMethodTest();
try{
$this->toolkit->TstPublicFunc2();
$this->fail();
}catch(Exception $e){
$this->pass();
}
}
public function TestExtendTools()
{
$this->toolkit->Extend('TstObjectWithOutInterfaceTools');
$this->MethodWithoutInterfaceTest();
$this->toolkit->Extend('TstObjectWithInterfaceTools');
$this->assertEqual('TstObjectWithInterfaceTools::TstPublicFunc',$this->toolkit->TstPublicFunc());
$this->assertEqual('TstObjectWithOutInterfaceTools::TstPublicFunc2',$this->toolkit->TstPublicFunc2());
}
private function privateMethodTest()
{
try{
$this->toolkit->TstPrivateFunc();
$this->fail();
}catch(Exception $e){
$this->pass();
}
}
private function MethodWithoutInterfaceTest()
{
$this->assertEqual('TstObjectWithOutInterfaceTools::TstPublicFunc',$this->toolkit->TstPublicFunc());
$this->assertEqual('TstObjectWithOutInterfaceTools::TstPublicFunc2',$this->toolkit->TstPublicFunc2());
}
}
class TstObjectWithOutInterfaceTools
{
public function TstPublicFunc()
{
return __METHOD__;
}
public function TstPublicFunc2()
{
return __METHOD__;
}
private function TstPrivateFunc()
{
return __METHOD__;
}
}
class TstObjectWithInterfaceTools implements iTools
{
public function getSignatures()
{
return array('TstPublicFunc');
}
public function TstPublicFunc()
{
return __METHOD__;
}
public function TstPublicFunc2()
{
return __METHOD__;
}
private function TstPrivateFunc()
{
return __METHOD__;
}
}
?> -
-
1 октября 2008 г. 9:59, спустя 47 минут 38 секунд
Patrick, да я думаю ты скоипастил очень сложный для понимания кусок -
1 октября 2008 г. 18:24, спустя 8 часов 24 минуты 19 секунд
CTAPbIu_MABP, угу :D только все ваши проблемы он решает ;) -
Страницы: ← Предыдущая страница • Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!