出于MVC的原因,我希望能够触发一个函数来查找函数被调用的时间,因为Codeigniter具有围绕其核心的函数,我想挂钩一个函数,如setcookie
并创建一个文件当它被调用时(来自触发函数),例如:
function call_me()
{
$file = fopen('setcookie.txt', 'a+');
fwrite($file, 'Called at ' . __CLASS__);
fclose();
}
因此,当调用setcookie
时,它应该触发call_me
函数。有没有具体的功能或方法来做到这一点?我知道debug_backtrace
,但这不是我想要的目的。
答案 0 :(得分:1)
您基本上需要了解的是Observers。
观察者模式(也称为Dependents,发布/订阅)是一个 软件设计模式,其中一个对象,称为主题, 维护其家属列表,称为观察员,并通知 他们自动对任何状态进行更改,通常是通过调用其中一个 他们的方法。它主要用于实现分布式事件 处理系统。观察者也是熟悉的MVC中的关键部分 建筑模式。事实上,观察者模式是第一位的 在Smalltalk的基于MVC的用户界面框架中实现。1
为什么不尝试这里描述的内容:
答案 1 :(得分:1)
我知道debug_backtrace,但这不是我想要的目的。
我看到你坚持不使用回溯功能,但我仍然相信当你想要一个函数调用回溯时可以派上用场。
这个想法是,只要你想调试if条件评估这段代码,你就会有一个存储在常量中的预定义代码。
如果您处于原状,if语句将阻止评估任何内容,因此您的代码速度不会受到影响。如果它适合您,您可以根据需要进行修改,以追踪更多级别。
为了说明我的观点,这是一个完整的例子,如果我不理解,这不是你想要的,我的道歉!
要检查示例,您有一个文件: test.php
<?php
define ('__SITE_PATH',realpath(dirname(__FILE__)).'/');
ini_set('log_errors', 1);
ini_set('error_log', __SITE_PATH.'my_error_log.log');
include 'test1.php';
include 'test2.php';
define (__DEBUG_EVAL, '
$dbt = debug_backtrace();
error_log(
"\n".
"Parent function file: " . $dbt[1]["file"] . "\n" .
"Parent function class: " . $dbt[2]["class"] . "\n" .
"Parent fiunction name: " . $dbt[2]["function"] . "\n" .
"Par. fiunc. called from line: " . $dbt[2]["line"] . "\n" .
"Child function file: " . $dbt[0]["file"] . "\n" .
"Child function class: " . $dbt[1]["class"] . "\n" .
"Child fiunction name: " . $dbt[1]["function"] . "\n" .
"Child fiunc. called from line: " . $dbt[1]["line"] . "\n" .
"\n"
);
');
test1::a();
?>
这是 test1.php
<?PHP
class test1
{
public static function a()
{
test2::b();
}
}
?>
最后一个是 test2.php
<?PHP
class test2
{
public static function b()
{
if(defined('__DEBUG_EVAL')) eval(__DEBUG_EVAL);
echo 'Hello!';
}
}
?>
这是结果:
[13-Apr-2012 14:37:18]
Parent function file: C:\PHP-GTK\MyProjects\Electre\test1.php
Parent function class: test1
Parent fiunction name: a
Par. fiunc. called from line: 29
Child function file: C:\PHP-GTK\MyProjects\Electre\test2.php
Child function class: test2
Child fiunction name: b
Child fiunc. called from line: 7