ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
#### php判断函数,类,类方法是否存在 * * * * * 做php开发中,如果遇到自己不能修改服务器的相关配置也不能知道服务器某些功能是否开启的情况下,直接使用某些特殊的函数会导致程序报错。 比如curl_init这种系统函数。 当服务器未开启curl相关服务的时候,直接使用curl系列函数会报Call to undefined function curl_init()......这样的错误。 对于出现这种情况该如何办呢? 这里我们就需要涉及到判断某个方法是否存在的问题了,如果存在该方法则使用该方法,如果不存在该方法则使用另外的方法。 这里对于如何判断一个函数,类以及类中的方法是否存在做了一个整理: (1)php判断系统函数或自己写的函数是否存在 ~~~ bool function_exists ( string $function_name ) ~~~ 判断函数是否已经定义,例如: ~~~ if(function_exists('curl_init')){ curl_init(); }else{ echo 'not function curl_init'; } ~~~ (2)php判断类是否存在 ~~~ bool class_exists ( string $class_name [, bool $autoload = true ] ) ~~~ 检查一个类是否已经定义,一定以返回true,否则返回false,例如: ~~~ if(class_exists('MySQL')){ $myclass=new MySQL(); } ~~~ (3)php判断类里面的某个方法是否已经定义 ~~~ bool method_exists ( mixed $object , string $method_name ) ~~~ 检查类的方法是否存在,例如: ~~~ $directory=new Directory; if(!method_exists($directory,'read')){ echo '未定义read方法!'; } ~~~ #### PHP获取当前类名、方法名 * * * * * 1. __CLASS__ 获取当前类名 2. __FUNCTION__ 当前函数名(confirm) 3. __METHOD__ 当前方法名 (bankcard::confirm) 4. __FUNCTION__ 函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。 5. __CLASS__ 类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。 6. __METHOD__ 类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。 注:这些常量前后均是两个下划线。 get_class(class name);//取得当前语句所在类的类名 ~~~ get_class_methods(class name);//取得class name 类的所有的方法名,并且组成一个数组 get_class_vars(class name);//取得class name 类的所有的变亮名,并组成一个数组 ~~~ 可用get_class_methods方法来获取某个类或对象的所有方法名。 定义一个类class Cls150518{ public function getprop1();} print_r(get_class_methods('Cls150518'));将会打印出Cls150518类的所有方法,此处会打印出"getprop1"。 在动态方法调用的地方加上一个判断: if(in_array($methodName,get_class_methods('Cls150518')))就可以判断动态调用的方法在类Cls150518中是否存在。 更保险的做法是用is_callable,该方法可以判断动态方法是否存在且可被调用,有些方法如Private方法尽管存在但不能被调用。 is_callable的使用形式: $cls150518 = new Cls150518(); is_callable(array($cls150518 , 'getProp1')); 如果可调用返回true,否则返回false。