PHP 方法,类与对象的相关函数学习
1、function_exists
function_exists(string)检测函数是否存在,string表示需要检测的函数名称(注意与property_exists,method_exists,class_exists);
<?php
header('Content-type:text/html;charset=utf8');
$check = 'test';
function test($a)
{
echo 'this is ' . $a;
} var_dump(function_exists('test'));
//输出 bool(true)
var_dump(function_exists('check'));
//输出 bool(false)
?>
2、forward_static_call 和 forward_static_call_array
注意:这两个方法都必需在类的作用域里面调用
forward_static_call(callable,string...)callable表示需要调用的静态方法,一般的写法为array(className,staticName),string表示需要传入的参数,可以为多个参数
forward_static_call_array(callable,array)用法和上面一样,但是参数是一个数组
<?php
header('Content-type:text/html;charset=utf8'); Class A
{
public static function test()
{
var_dump(func_get_args());
}
} Class B
{
public static function check()
{
forward_static_call(['A', 'test'], 'first', 'second');
// forward_static_call([new A, 'test'], 'first', 'second'); 这个方法也可以执行,但是推荐上面那种写法
} public static function take()
{
forward_static_call_array(['A', 'test'], ['a', 'b', 'c']);
}
} B::check();
//输出 array(2) { [0]=> string(5) "first" [1]=> string(6) "second" }
B::take();
//输出 array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" }
?>
3、call_user_func 和 call_user_func_array
这两个方法表示调用方法
call_user_func(callable,string...) 表示调用已定义的方法,string表示需要传入的参数,如果调用的是类里面的方法,那么就要用call_user_func([className,funcName],string...)
call_user_func_array(callable,array) 用法同上面的一样,但是该方法传数的参数是一个数组
注意如果在类里面调用非静态方法传处call_user_func_array([$this,$method_name],$params),如果在类里面调用静态方法传入call_user_func_array(['self','method_name'],$params);
<?php
header('Content-type:text/html;charset=utf8'); Class A
{
public function test()
{
var_dump(func_get_args());
}
} Class B
{
public function check()
{
var_dump(func_get_args());
}
} function method($v = null)
{
echo 'this is method ' . $v;
} call_user_func('method', 'haha');
//输出 this is method haha
call_user_func(['A', 'test'], 'a', 'b', 'c', 'd');
//输出 array(4) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" [3]=> string(1) "d" }
call_user_func_array(['B', 'check'], ['first', 'second', 'third']);
//输出 array(3) { [0]=> string(5) "first" [1]=> string(6) "second" [2]=> string(5) "third" }
?>
4、func_get_arg,func_get_args 和 func_num_args
func_get_arg(num)表示返回参数列表中的指定参数,num表示参数的偏移量
func_get_args()表示返回所有的参数
func_num_args()表示返回所有参数的个数
<?php
header('Content-type:text/html;charset=utf8'); Class A
{
public function test()
{
var_dump(func_get_args());
//输出 array(3) { [0]=> string(5) "first" [1]=> string(6) "second" [2]=> string(5) "third" }
var_dump(func_get_arg(0));
//输出 string(5) "first"
var_dump(func_num_args());
//输出 int(3)
}
} call_user_func([new A, 'test'], 'first', 'second', 'third');
?>
5、get_defined_functions
get_defined_functions()表示返回所有的函数,包括系统内部的函数,用户自定义的函数,系统内部的函数用$arr['internal']来访问,用户的函数用$arr['user']来访问
<?php
header('Content-type:text/html;charset=utf8'); function test()
{
echo 'this is test';
} print_r(get_defined_functions());
//输出如下数组
//Array
//(
// [internal] => Array
// (
// [0] => zend_version
// [1] => func_num_args
// [2] => func_get_arg
// [3] => func_get_args
// [4] => strlen
// ...
// [750] => bcscale
// [751] => bccomp
// )
//
// [user] => Array
//(
// [0] => test
//)
//
//)
?>
5、register_shutdown_function
register_shutdown_function(callback,params)表示定义一个在页面加载完之后触发(即也是在exit前触发的函数),callback表示回调函数,params表示需要传入的函数,也可以调用类里面的方法,方法同call_user_func()一样
<?php
header('Content-type:text/html;charset=utf8');
register_shutdown_function(function () {
var_dump(func_get_args());
}, 'y', 'f'); function test()
{
echo 'this is first'."<br>";
exit;
echo 'this is second';
} test();
//输出如下内容
//this is first
//array(2) { [0]=> string(1) "y" [1]=> string(1) "f" }
?> <?php
header('Content-type:text/html;charset=utf8');
register_shutdown_function([new A, 'test'], 'AA', 'BB', 'CC'); Class A
{
public function test()
{
var_dump(func_get_args());
}
} echo 'ok <br>';
//输出如下内容
//ok
//array(3) { [0]=> string(2) "AA" [1]=> string(2) "BB" [2]=> string(2) "CC" }
?>
PHP 方法,类与对象的相关函数学习的更多相关文章
- Java类与对象的基础学习
1. 请输入并运行以下代码,得到什么结果? public class Test{ public static void main(String args[]){ Foo obj1=new Foo(); ...
- [Java]Java入门笔记(三):类、对象和方法
七.类.对象和方法 类和对象的关系 类定义了对象的本质: 类(class)是对象(object)的模板,而对象(object)是类的一个实例(instance). 使多个对象的指向相同: Studen ...
- 类、对象(java基础知识六)
1.Java约定俗成 java约定俗成 1,类名接口名 一个单词首字母大写,多个单词每个单词首字母都大写 2,方法名和变量名 一个单词全部小写,多个单词从第二个单词首字母大写 建议:如果能用英语尽量用 ...
- PHP7语法知识(三):时间与日期、表单、类与对象、正则表达式、错误异常处理、图像处理
时间与日期 一.设置时区 1.在配置文件中设置: 2.通过data_default_timezone_set函数在文件中设置: 二.获取当前时间 三.常用时间处理方法 1.格式化时间显示: 2.计算时 ...
- JavaScript 浅析数组对象与类数组对象
数组(Array对象) 数组的操作 创建数组方法 添加与修改数组元素 删除数组元素 使用数组元素 遍历数组元素 多维数组 数组相关的函数 concat() join() pop() push() sh ...
- 新手C#类、对象、字段、方法的学习2018.08.05
类:具有相似属性和方法的对象的集合,如“人”是个类. 对象(实例):对象是具体的看得见摸得着的,如“张三”是“人”这个类的对象.(new Person()开辟了堆空间中,=开辟了栈空间,变量P存放在该 ...
- iOS学习10之OC类和对象
本次是OC的第一节课,主要是学习和理解类与对象 1.面向对象 1> OOP(Object Oriented Programming)面向对象编程. 面向对象以事物为中心,完成某件事情都需要哪些事 ...
- Javascript学习6 - 类、对象、继承
原文:Javascript学习6 - 类.对象.继承 Javasciprt并不像C++一样支持真正的类,也不是用class关键字来定义类.Javascript定义类也是使用function关键字来完成 ...
- 学习笔记——Java类和对象
今天学习了Java的类和对象的相关知识,由于Java面向对象的编程的思想和C++几乎一样,所以需要更多的关注Java的一些不同之处. 1.类 1.1 在类这一块,除了基本的成员变量,成员方法,构造函数 ...
随机推荐
- hibernate多表操作
一.表之间的关系 1.一对一 2.一对多 3.多对多 二.表之间关系建表原则 1.一对多:在多的一方创建一个外键,指向一的一方的主键 2.多对多:创建一个中间表,中间表至少有两个字段,分别作为外键指向 ...
- Android中高级工程师面试题
https://www.cnblogs.com/huangjialin/p/8657565.html(存在不少答案错误,可参照知识点复习,答案不可全信) 上 https://www.cnblogs. ...
- Light oj 1018 - Brush (IV) 状态压缩
题目大意: 给出n个点的坐标,求至少画多少掉直线才能连接所有点. 题目思路:状态压缩 首先经行预处理,求出所有状态下,那些点不在该状态内 以任意两点为端点求出这条直线的状态 枚举所有状态,找出不在当前 ...
- python,魔法方法指南
1.简介 本指南归纳于我的几个月的博客,主题是 魔法方法 . 什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加“魔法”的特殊方法. 它们经常是两个下划线包围来命名的 ...
- 20165221 JAVA第四周学习心得
教材内容总结 子类与继承 子类与父类 定义的标准格式为 class 子类名 extends 父类名 { ... } 如果一个类的声明中,没有使用extends关键字,则默认为Object类. 子类的继 ...
- XAF 框架中,自定义参数动作(Action),输入参数的控件可定义,用于选择组织及项目
XAF 框架中,如何生成一个自定义参数动作(Action),输入参数的控件可定义? 参考文档:https://documentation.devexpress.com/eXpressAppFramew ...
- windows网络相关的命令
一.netstat命令 显示协议统计信息和当前 TCP/IP 网络连接. NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p proto] [-r] [-s] [-x] ...
- java.sql.SQLException: Column count doesn't match value count at row 1 解决办法
♦ 所存储的数据与数据库表的字段类型定义不匹配. ♦ 解决办法: 检查dao层(数据访问层)的sql语句中赋值的参数是否与数据库中的字段个数.字段类型一致.
- 【转】Java HashMap的死循环
问题的症状 从前我们的Java代码因为一些原因使用了HashMap这个东西,但是当时的程序是单线程的,一切都没有问题.后来,我们的程序性能有问题,所以需要变成多线程的,于是,变成多线程后到了线上,发现 ...
- Nikitosh 和异或 —— 一道 trie 树的题用可持久化 trie 水 然后翻车了...
题意简介 题目就是叫你找两个不重合的非空区间,使得这两个区间里的数异或后相加的和最大 (看到异或,没错就决定是你了可持久化trie!) 思路 水一波字典树,莫名觉得这题可持久化能过,于是水了一发挂了, ...