상당히 중복 된 것은 아닙니다 ... 여기 있습니다.하위 클래스의 마법 메서드가 오버로드 됨
내 목표는 디버그 클래스에서 여러 가지 마법 메서드를 오버로드하고 내 주 클래스가 해당 클래스를 확장하도록하는 것입니다. 내 생각에 이것은 모든 클래스에서 하나씩 마법 메서드를 오버로드하지 않고도 응용 프로그램 스택을 통해 디버깅 단계를 수행 할 수있게되었습니다.
지금까지 코드는 확장이
class magicdbg
{
//data container object
private $data;
public function __construct()
{
require_once("data.php");
$this->data = data::defInstance();
}
public function __call($name,$arguments)
{
echo "overloading call <br />";
$this->data->dbgmsg("Calling method: " . __METHOD__ . " -- with arguments: (" .implode(',',$arguments) . ")");
}
public function __get($var)
{
}
}
와 클래스 같은 것을 보이는 것이
class data
{
//application settings
CONST DEBUG = true;
//application messages
//debug messages
private $dbgmsgs;
private $errormsgs = array();
//application objects
//singleton object instance
private static $instance;
public function __construct()
{
//if debug is enabled instantiate the debug message array
if(self::DEBUG)
$this->dbgmsgs = array();
}
public static function defInstance()
{
echo "defining instance";
if(!self::$instance)
self::$instance = new data();
echo "<br />instance defined<br />";
return self::$instance;
}
public function dbgmsg($msg)
{
echo "calling dbgmsg <br />";
if(self::DEBUG)
$this->dbgmsgs[] = $msg;
}
public function outputDbg()
{
if(!self::DEBUG)
return false;
echo "testing dbg output <br />";
$return = '<div id="debug"><ul>';
foreach($this->dbgmsgs as $msg)
$return .= "<li>" . $msg . "</li>";
$return .= "</ul></div>";
return $return;
}
}
를 호출 magicdbg 방법을 포함
require_once("magicdbg.php");
class salesCtrl extends magicdbg
{
private $data;
public function __construct()
{
require_once('data.php');
$this->data = data::defInstance();
$this->testcall();
}
private function testcall()
{
echo "test";
}
}
마지막 수업 코드는 다음과 같이 인스턴스화됩니다.
require_once('sales.ctrl.php');
$ctrl = new salesCtrl();
그리고 마지막으로 ... 내 문제는 magicdbg 클래스에 정의 된 마법 메서드가 맞지 않는 것 같습니다. 나는 내가 기대했던 것처럼 그것이 작동하지 않는다고 생각한다. 이것은 단지 마법 방법과 과부하에 대한 이해가 부족할뿐만 아니라 상속 일 수도 있습니다. 누군가가 정확히 무엇이 잘못 될지에 대해 나를 채울 수 있습니까? 또는 어쩌면 더 나은 방법은 무엇을 의도합니까?
'testCall()'자식으로부터 부모 호출을 강제로 시도하는 행위를 불법으로 처리 할 수 있습니다. 'parent :: testCall()'. –
많은 분들께 감사드립니다. 그것을 설명 할 것입니다. – steve