魔术方法__call(string $name, array $arguments)

本文通过一个具体的PHP示例介绍了如何使用魔术方法__call来处理对象中不存在的方法调用,使得程序能够继续执行而不会因致命错误而终止。

背景:在调用对象中不存在或不可访问(私有受保护)的方法时,程序抛出致命的错误终止程序的进行。

161029_sE7R_2299514.png

为了处理这种错误的同时让程序继续执行,我们可以在类中添加一个魔术方法__call,来调用对象中不存在的方法时自动调用该方法,并且使程序可以继续向下执行。


<?php
    class Person{         
        function say(){  
            echo "Hello, wblog!<br>"

 }          
        function __call($funName, $args) { //声明此方法用来处理调用对象中不存在的方法                   

            echo      "你所调用的函数:".$funName."不存在!<br>\n";                       

            }

      }

$Person=new Person();            
$Person->run("teacher"); //调用对象中不存在的方法,则自动调用了对象中的__call()方法
$Person->say();

?>

运行结果: 

你所调用的函数run不存在!

Hello, wblog!

总结:

在类中添加一个魔术方法__call,在调用对象中不存在的方法时就会自动调用该方法,并且程序可以继续向下执行。

 

转载于:https://my.oschina.net/u/2299514/blog/787025

#newlib库的裁剪链接 function(add_library_extract_lib_objects target_name source_lib include_object_files exclude_object_files) # 临时工作目录,用于解压和操作目标文件 set(tmp_output_dir ${CMAKE_EXTRACT_LIB_DIR}/ar_extract_objects_tmp/${target_name}) # 最终输出目录,存放生成的新库文件 set(target_output_dir ${CMAKE_EXTRACT_LIB_DIR}/ar_extract_objects_libs/${target_name}) # 新生成的库文件名(格式为lib[target_name].a) set(target_file lib${target_name}.a) set(ar_flags qc) file(MAKE_DIRECTORY ${target_output_dir}) file(MAKE_DIRECTORY ${tmp_output_dir}) set(${target_name}_dependency_list ${source_lib}) add_custom_target(${target_name}_ar_tmp_source ALL COMMAND ${CMAKE_AR} xo "${source_lib}" WORKING_DIRECTORY ${tmp_output_dir}) list(APPEND ${target_name}_dependency_list ${target_name}_ar_tmp_source) list(LENGTH exclude_object_files exclude_object_files_length) if(${exclude_object_files_length} GREATER 0) add_custom_target(${target_name}_exclude_target ALL DEPENDS ${target_name}_ar_tmp_source COMMAND rm -f ${exclude_object_files} WORKING_DIRECTORY ${tmp_output_dir} ) list(APPEND ${target_name}_dependency_list ${target_name}_exclude_target) endif() list(LENGTH include_object_files include_object_files_length) if(${include_object_files_length} GREATER 0) add_custom_target(${target_name}_include_target ALL DEPENDS ${target_name}_ar_tmp_source COMMAND mkdir -p include COMMAND mv ${include_object_files} include/ COMMAND rm -f *.o COMMAND mv include/* . WORKING_DIRECTORY ${tmp_output_dir} ) list(APPEND ${target_name}_dependency_list ${target_name}_include_target) endif() add_custom_command(OUTPUT ${target_output_dir}/${target_file} DEPENDS ${${target_name}_dependency_list} COMMAND rm -f ${target_output_dir}/${target_file} COMMAND ${CMAKE_AR} ${ar_flags} ${target_output_dir}/${target_file} ${tmp_output_dir}/*.o COMMAND rm -f ${tmp_output_dir}/*.o WORKING_DIRECTORY ${target_output_dir} ) add_custom_target(CUSTOM_${target_name} ALL DEPENDS ${target_output_dir}/${target_file}) set_target_properties(CUSTOM_${target_name} PROPERTIES TARGET_FILE ${target_output_dir}/${target_file}) add_library(${target_name} STATIC IMPORTED GLOBAL) set_target_properties(${target_name} PROPERTIES IMPORTED_LOCATION ${target_output_dir}/${target_file} ) add_dependencies(${target_name} CUSTOM_${target_name}) endfunction() 将以上代码添加注释
最新发布
08-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值