读深入PHP面向对象、模式与实践一书时,发现了很多和类、对象有关的内置函数,很多感觉很新奇,业务开发也很少会用到,这里想总结一下,一是为了以后复习方便,二是想分享给大家学习。
PHP有关于面向对象的内置函数:
1.class_exists(string $className) :bool
接受表示类的字符串,检查返回布尔值,当类存在时,返回true
2.get_declared_classes():array
获得脚本进程中定义的所有类的数组,只返回在函数调用时已经声明的类
3.get_class(object $objectName):string
接受任何对象作为参数,并以字符串的形式返回类名
4.get_class_methods(string $className) :array
以字符串类名作为参数,可以拿到一个类中所有方法的列表
5.is_a(object $objectName, string $className):bool
这个是比较少见的方法,这个函数在PHP5.0中不再使用了,但从PHP5.3开始又重新启用了,其作用是在PHP4之前担任instanceof关键字的作用,用于判断某个对象是否属于某个类
6.object instanceof class :bool
instanceof 是一个关键字,用来判别某个对象是否属于某个类,返回bool值
7.is_callable ( callable $name [, bool $syntax_only = false [, string &$callable_name ]] ) : bool
这个的用法就比较多了,又大概以下几种格式:
1.is_callable(function)
用于判断某个函数是否可用,这个无法用来判断当前类方法是否存在,如果你在当前类里面去这样去调用,直接return false
2.is_callable([object,method)
这个才是用来判断某个方法在某个类里面是否可调用的,第一个参数不再是一个字符串,而是一个数组,而且要求数组第一个元素是对象,第二个是方法名,结果返回布尔值
3.is_callable(xxx,bool)
第二个参数就有点牛逼了,它的作用是判断你用它用的对不对, 默认是false,如果你给了true,它就只检查你的用法是否正确,而不管你传的函数或方法是否真正的存在,这个参数实际上是有作用的,因为你用它的时候,不按它的想法传参,也是只return false,就会存在一种用错的可能,因此这个参数确实可以用来检查问题。
4.is_callable(xxx,bool,$callableName)
第三个参数有点奇怪,需要你传入一个变量,内核会把这个变量进行赋值为所检查方法的j执行路径,详情看下列示例
notice:此处请注意,方法存在不见得是可调用的,还跟方法的限定词privact那些有关系,请自行脑补画面
示例:
<?php
namespace App\Http\Controllers\Test;
use App\Http\Controllers\Controller;
class TestController extends Controller
{
public function test()
{
dump(is_callable('in_array'));//函数是否可调,true
dump(is_callable([$this,'getSomeThing']));//对象所属类方法是否可调,true
dump(is_callable(['TestController','getSomeThing']));//这种写法结果只能返回false,false
dump(is_callable(['TestController','getSomeThing','333']));//这种写法结果只能返回false,false
dump(is_callable([$this,'getSomeThing'],true));//只检查调用语法是否正确,true
dump(is_callable([$this,'getSomeThing111'],true));//只检查调用语法是否正确,true
dump(is_callable(['TestController','getSomeThing'],true));//只检查调用语法是否正确,true
dump(is_callable(['TestController','getSomeThing','444'],true));//只检查调用语法是否正确,false
dump(is_callable([$this,'getSomeThing444'],false,$callableName));//$callableName 变量会被重写
echo $callableName;//该值为App\Http\Controllers\Test\TestController::getSomeThing444
}
public function getSomeThing()
{
echo 'zyhnb';
}
}
8.get_class_vars(string $className): array
获得某个类所有的属性,
9.get_parent_class(string $className):mixed
该返回接受一个类名称,如果该类存在父类则返回父类的名称,否则返回false
10.is_subclass_of(object $object , string $className)
用于判断某个类是否为某个对象所属类的父类,如果该类名是该对象的父类的话,则返回true,否则返回false,这个只能明确继承关系,无法知道是否实现了某个接口
11.class_implement(object|sting $className):array
该函数属于spl中的一部分,我们可以使用一个类名或者对象的引用作为参数,将返回一个由接口名构成的数组
12.call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] ) : mixed
传入一个函数名字符串作为参数时,作用是动态调用一个函数,属于同步调用
传入一个数组时,数组的第一元素应为一个对象,第二个是方法名,作用是动态调用该对象所属类的类方法,属于同步调用
13.call_user_func_array ( callable $callback , array $param_arr ) : mixed
跟上面有所不同的是,这里增加了参数的传递,要求传递的参数为索引数组,不能是关联数组,属于同步调用
遇到新的再补充哈哈哈!