我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

本文中,苏南大叔将总结对未知代码进行分析的时候,可能会用得到的函数。相对而言,本文的重要性就不是那么重要,因为一般来说,输出变量就可以很好的分析当前代码啦。不过作为代码分析的辅助功能,这些函数还是有必要继续使用的。

苏南大叔:未知php代码分析,常用辅助分析类函数总结 - php-analyze
未知php代码分析,常用辅助分析类函数总结(图1-1)

取得当前类名

取得当前语句所在类的类名,下述几条语句是等同的效果。

echo get_class($this);
echo get_class();
echo __CLASS__;

当然,如果对get_class()传递一个类实体变量的话,就可以返回对应的类名。参数如果写的话,就必须是个object,否则直接报错get_class() expects parameter 1 to be object

echo get_class($obj);

取得某类名下的所有方法

取得类的所有的方法名数组。参数可以是类实体,也可以是类名。失败的话,返回NULL

var_dump(get_class_methods(__CLASS__));
var_dump(get_class_methods($this));
var_dump(get_class_methods(new class1()));
var_dump(get_class_methods("class_name"));

值得说明的是:

  • 可以取得所有的方法名,包括privateprotected的方法。
  • 可以取得所有的方法名,包括从父类继承的方法。
  • 不包括没有显式定义的系统方法,比如:__destruct()或者__clone()等等。当然,如果定义了,就会在返回值中,有体现。
  • http://doc.php.sh/zh/function.get-class-methods.html

取得某类名下的所有属性kv数组

从函数名称上面看,是取得vars,其实就是属性的名称和值的集合了。失败的话,返回NULL

var_dump(get_class_vars(__CLASS__));
var_dump(get_class_vars(get_class($this)));
var_dump(get_class_vars("class_name"));

这里需要注意的是:

  • 可以取得private的属性情况,也可以取得publicprotected的属性。
  • 传递的参数是个类名,不是个变量实体。
  • 返回值是kv键值数组,其中的值是初始化默认定义值。注意并不是__construct()中改变的值,就是属性定义时的默认值。
  • http://doc.php.sh/zh/function.get-class-vars.html

取得某类名下所有常量

$reflect = new ReflectionClass("class_name");
//$reflect = new ReflectionClass(get_class($this));
return $reflect->getConstants();

这个有些高级了,因为用到了反射ReflectionClass的概念,返回的范围是对应类名中用const定义的常量的集合数组。下面是个范例。

class TestCase
{
    public $a    = 1;
    protected $b = 2;
    private $c   = 3;
    const AUTHOR = "苏南大叔";
    const VERSION = "0.0.1";
    const DEBUG  = FALSE;
}
$reflect = new ReflectionClass("TestCase");
var_dump($reflect->getConstants());

返回值是:

newsn.net:这里是【评论】可见内容

取得某函数(某方法)传递进来的参数

var_dump(func_num_args());
var_dump(func_get_arg(0));
var_dump(func_get_args());

这个主要用于传递的参数未知的情况下,就可以用这些函数了。

  • func_num_args(),传递进来的参数的个数。
  • func_get_arg($index),传递的第$index个参数的实参值。当然了,第一个参数的话就写0,这个不解释。
  • func_get_args(),传递进来的参数的数组。知道为啥上边填0了吧?

相关链接

总结

php是世界上最好的语言,没有其它。更多php相关经验文章,请点击苏南大叔的博客查看:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   php    debug