我有一个PHP Class方法,其中包含许多条件语句,如果某些条件为真,它将停止/返回。
对于调试,我想知道实际上是什么条件使函数返回了控件。
breakpoint
我无法控制调用它的函数/方法。
答案 0 :(得分:3)
您可以对其进行日志处理
public function handle_request() {
if ( ! $this->is_data_writable() ) {
error_log("is_data_writable", 3, "/var/tmp/my-errors.log");
return;
}
if ( ! $this->user_has_permissions() ) {
error_log("user_has_permissions", 3, "/var/tmp/my-errors.log");
return;
}
if ( 'active' != $this->object->status ) {
error_log("not_active", 3, "/var/tmp/my-errors.log");
return;
}
// do the stuff
}
您可以使用自己的错误处理程序自定义错误处理,以便在发生错误或警告或需要记录的任何内容时为您调用此功能。
答案 1 :(得分:0)
您可以执行debug_print_backspace
函数以打印调用堆栈。 http://php.net/manual/en/function.debug-print-backtrace.php
答案 2 :(得分:0)
您可以使用以下方法: 创建一个包含所有步骤的数组,并使用全局变量来跟踪该步骤:
$request_error='';
public function handle_request(){
$steps=['is_data_writable','user_has_permissions','active'];
global $request_error;
foreach($steps as $step){
if($step!='active'){
if(! $this->$step()){
$request_error=$step;
return;
}
}else{
if($step!=$this->object->status){
$request_error=$step;
return;
}
}
}
//do the stuff
}
然后您可以根据需要使用$request_error
。
另一种非常相似的方法是: 创建一个包含所有步骤的数组,并使用引用来跟踪该步骤,但这将改变您的方法原型:
public function handle_request(&$request_error){
$steps=['is_data_writable','user_has_permissions','active'];
foreach($steps as $step){
if($step!='active'){
if(! $this->$step()){
$request_error=$step;
return;
}
}else{
if($step!=$this->object->status){
$request_error=$step;
return;
}
}
}
//do the stuff
}
然后您可以根据需要使用分配的值。您可以通过这种方法为参数指定默认值以使其生效 可选的 请注意,您可以避免使用数组,但是会多写一些。