类函数与对象函数

读深入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

跟上面有所不同的是,这里增加了参数的传递,要求传递的参数为索引数组,不能是关联数组,属于同步调用

遇到新的再补充哈哈哈!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MClink

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值