海洋网络网站建设,企业网站优化案例,百度推广登录入口下载,二级网页打不开是什么原因前言#xff1a;累麻了#xff01;
反射类 反射类 ReflectionClass#xff1a;ReflectionClass 类报告了一个类的有关信息。正如其名用于映射反射一个类的类#xff01; new ReflectionClass(MyClass) 会创建一个 ReflectionClass 实例#xff0c;代表 MyClass 这个类。 …前言累麻了
反射类 反射类 ReflectionClassReflectionClass 类报告了一个类的有关信息。正如其名用于映射反射一个类的类 new ReflectionClass(MyClass) 会创建一个 ReflectionClass 实例代表 MyClass 这个类。 基础用法
1.对象字符串的表示形式
ReflectionClass::__toString 返回 ReflectionClass对象字符串的表示形式
?php
class MyClass {public $namerufeii;public function printName(){echo $this-name;}
}
$class new ReflectionClass(MyClass);
echo $class; //这里触发了__toString魔术方法
?
展示了类的 定义位置、属性、方法 等信息。 Class [ class 类名 ] { 文件位置 路径 行号范围 - 常量 [数量] { 具体常量... } - 静态属性 [数量] { 具体静态属性... } - 静态方法 [数量] { 具体静态方法... } - 普通属性 [数量] { 具体属性... } - 方法 [数量] { 具体方法... } } 2.获取类的名称
(new ReflectionClass(class?))-getName() // 获取类名称
?php
class MyClass {public $namerufeii;public function printName(){echo $this-name;}
}
$class new ReflectionClass(MyClass);
echo $class-getName(); // MyClass
?
3.获取属性名称和属性值
?php
class MyClass {public $namerufeii;public $age19;public function printName(){echo $this-name;}public function printAge(){echo $this-age;}
}
$class new ReflectionClass(MyClass);
$properties $class-getProperties();foreach ($properties as $property) {$name $property-getName();$value $property-getValue(new MyClass());echo $name: $value\n;
}
?
获取值用到了ReflectionProperty类的方法getValue()是因为ReflectionClass::getProperty #返回值是一个数组是一个类所以还可以用来调用方法。
4.读取类的方法和参数
?php
class MyClass {public $namerufeii;public $age19;public function printName($parameter1){echo $this-name;echo $parameter1;}public function printAge($parameter2){echo $this-age;echo $parameter2;}
}
$class new ReflectionClass(MyClass);
$a$class-getMethods();
foreach($a as $method)
{echo $method-getName().(;$params$method-getParameters();foreach($params as $param){echo $param-getName().)br;}
}
?
操作文件的类
目录遍历类 DirectoryIterator 利用版本PHP5, PHP7, PHP8 FilesystemIterator 利用版本PHP 5且 5.3.0, PHP 7, PHP 8 GlobIterator PHP 5 且 5.3.0, PHP 7, PHP 8 1. DirectoryIterator
怎么去遍历文件目录使用里面的__tostring()魔术方法
?php
$dirnew DirectoryIterator(../);
foreach ($dir as $fileinfo) {echo $fileinfo.br;
}
?
输出的第一个文件是.
第二个文件..
所以如果不用循环的话出来的就是.
当然也可以用glob://协议去作为一个伪文件系统访问接口去绕过open_basedir这个安全配置项rce里面有个需要绕过open_basedir的)
?php
$dirnew DirectoryIterator(glob:///*);
foreach($dir as $a){echo $a-__toString(). ;
}
?
2.FilesystemIterator
?php
$dirnew FilesystemIterator(../);
foreach ($dir as $fileinfo) {echo $fileinfo.br;
}
?
与DirectoryIterator不同的是没有了前面两个没有的东西了.和..那么如果我们不用循环的话直接输出的话有可能也是可以获取敏感文件的比如web99--web114php特性篇-CSDN博客 这里的web109
那么这里也是可以用glob://协议的
3.GlobIterator
GlobIterator 继承于DirectoryIterator而且自带了glob那么就可以直接使用linux的通配符
?php$dirnew GlobIterator(../*);
foreach($dir as $a){echo $a-__toString(). ;
}
?
那么这里同样是没有.和..的所以也可以利用直接输出$dir说不定有用
文件读取的类
SplFileObject
?php
$contentnew SplFileObject(/flag);
foreach($content as $content){echo $content. ;
}
?
总结 简单的水了一下后续有机会在慢慢补吧