最终实例在下方

以前用过cakephp, 他们的数据库查询还是蛮强大的, 后来好奇它的类的写法,比如:

<?php
$this->Post->findByTitle('My First Blog Post');
$this->Author->findByLastName('Rogers');
  • findBy<fieldName>
  • string $value
  • findAllBy<fieldName>
  • string $value

findAllBy 或者 findBy 后面可以跟变量, 它大概的方法就是使用了三个核心内置函数: __call, method_exists() 和 call_user_func_array (或者call_user_func), 下面先讲解他们各自的含义和用法:

__call()

定义和用法

__call() 这个方法用来监视一个对象中的其它方法。如果你试着调用一个对象中不存在或被权限控制中的方法,__call 方法将会被自动调用。

注:通常被称为魔法函数。

语法: __call(name, arguments)

参数 描述
name 方法名
arguments 传递的参数

例子

<?php
class MyClass {public function __call($name, $arguments) {// 注意: $name 区分大小写echo "调用了方法: '$name'<br/> ";echo '参数是:'.implode(', ', $arguments). "\n";}
}
$obj = new MyClass;
$obj->callMe('abc','123');//运行结果:
//调用了方法:callMe
//参数是:abc,123

method_exists()

定义和用法

检查类的方法是否存在于指定的 object中。

语法: method_exists(object,method_name)

参数 描述
object 规定的对象示例或者类名。
method_name 规定的方法名。

例子

<?php
class Test {public function explicit( ) {// ...}public function __call( $meth, $args ) {// 魔术方法,当调用的方法不存在时自动调用此方法}
}$Tester = new Test();
// method_exists() -方法是否存在
var_export(method_exists($Tester, 'anything')); // false
// is_callable() - 检测参数是否可调用
var_export(is_callable(array($Tester, 'anything'))); // true
?>

call_user_func()

定义和用法

调用指定函数,并传入参数。

语法

  1. call_user_func(callback, parameter)
参数 描述
callback 调用的函数名称
parameter 传入的参数

例子

<?php
error_reporting(E_ALL);
function increment(&$var)
{$var++;
}$a = 0;
call_user_func('increment', $a);
echo $a."\n";call_user_func_array('increment', array(&$a)); // PHP 5.3前 版本可用
echo $a."\n";//输出:
//0
//1

call_user_func_array()

定义和用法

用一个数组作为参数调用一个回调函数·返回值为回调函数执行的结果或者为false

语法

  1. call_user_func_array(callback , param_arr)
参数 描述
callback 要调用的回调函数,可以是函数或者类方法
param_arr 传入的参数

点击阅读全文

更多参考:

php框架--php框架的连贯查询实现原理

PHP: 关键字global 和 超全局变量$GLOBALS的用法、解释、区别

PHP: 手把手编写自己的 MVC 框架实例教程

JavaScript使用PHP函数 PHP extensions in JavaScript

原文: PHP: 在类(class)中加载动态函数, 变量函数或半变量函数 variable function/method

PHP: 在类(class)中加载动态函数, 变量函数或半变量函数 variable function/method相关推荐

  1. Cesium中加载动态水

    1.首先来看一下整体效果 2.具体方法如下: 首先,你必须有两张很重要的图片,你可以从我这里保存为本地 3.具体代码如下 var scene=viewer.scene;function applyWa ...

  2. 在WPF中加载gif动态图片

    向WPF中加载动态图片有很多种办法,下面介绍一种比较简单的办法. 右键项目,在管理程序包中添加XamlAnimatedGif包,进行安装. . 在设计文件中添加头文件XamlAnimatedGif的头 ...

  3. Final关键字和类的自动加载

    Final关键字: 父类中的方法被声明为 final,则子类无法覆盖该方法.如果一个类被声明为 final,则不能被继承. 一般是为了防止父类的一个方法被重写.只能用来定义类和定义方法, 不能使用fi ...

  4. Angular(4)中加载Arcgis for JavaScript地图

    背景 近期我司项目的需要,采用Angular(4)+SpringBoot前后端分离的架构.并且在需要在项目中实现Arcgis地图. 本人之前有过Arcgis for JavaScript的小小填坑经验 ...

  5. 利用classloader同一个项目中加载另一个同名的类_线程上下文类加载器ContextClassLoader内存泄漏隐患...

    前提 今天(2020-01-18)在编写Netty相关代码的时候,从Netty源码中的ThreadDeathWatcher和GlobalEventExecutor追溯到两个和线程上下文类加载器Cont ...

  6. html 调用c#dll中的控件,C#实现反射调用动态加载的DLL文件中的方法和在窗体中加载DLL文件的用户控件...

    反射的作用: 1. 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型 2. 应用程序需要在运行时从某个特定的程序集中载入一个特定的类型,以便实现某个任务时可以用到反射. ...

  7. composer php中如何执行,php中composer如何实现类的自动加载(示例讲解)

    本篇文章给大家带来的内容是关于php中composer如何实现类的自动加载(示例讲解),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 我们在开发项目中会经常用到第三方的类库插件,但是 ...

  8. php 类自动执行,php类中的魔术方法及类的自动加载

    类的模式方法都是 public 的,以 两个下划线开头,在某些情况下自动被调用,有点类似 hook 或者 事件触发. 魔术方法的传参方式不能使用引用. __construct() : 构造函数,实例化 ...

  9. Springboot 配置类( @Configuration) 不能使用@Value注解从application.propertyes中加载值以及Environment为null解决方案

    Springboot 配置类( @Configuration) 不能使用@Value注解从application.propertyes中加载值以及Environment为null解决方案 参考文章: ...

最新文章

  1. ACMNO.35 C语言-宏润年 给年份year,定义一个宏,以判别该年份是否闰年。提示:宏名可以定义为LEAP_YEAR,形参为y,既定义宏的形式为 #define LEAP_YEAR(y)
  2. project甘特图导出图片_云盒子预览升级,新增WPS、Visio、Project文档在线预览
  3. LVS DR模式 负载均衡服务搭建
  4. ubuntu16.04 下安装配置python3.6
  5. 【计算广告】不懂这些专业术语别说你懂广告
  6. memcpy、memmove、memset、memchr、memcmp、strstr详解
  7. 产品经理和程序员之间的“潜台词”,你能听懂多少?
  8. 【C语言】用指针作为形参完成数据的升序排列
  9. 15. Scala并发编程模型Akka
  10. 金币(NOIP2015 普及组第一题)
  11. 如何胜任一个小型公司的技术总监?
  12. spring3: 表达式5.2 SpEL基础
  13. 小米max2刷android p,小米max2刷LineageOS记录
  14. 机外码、区位码、国标码、机内码
  15. 网狐cocos2d-lua棋牌二次开发搭建教程
  16. 计算机地质制图CAD,计算机辅助地质制图
  17. CentOS 7账号密码忘了怎么办?
  18. 基站定位和GPS定位区别
  19. 并发模拟的四种方式+工具,超级实用!
  20. Linux基础知识系统学习.NO2——基础字符界面命令

热门文章

  1. 信息学奥赛一本通(1021:打印字符)
  2. 松鼠聚会(洛谷-P3964)
  3. Bear in the Field(CF-385E)
  4. Lost Array(CF-1043B)
  5. 数列分段`Section II`(洛谷-P1182)
  6. python中什么叫函数_Python 基础起步 (十) 什么叫函数?
  7. 5000个收货地址_欠薪老赖和法院玩4年“躲猫猫”,双十一更新收货地址后被抓...
  8. 一起学习C语言:数组(三)
  9. noip2017初赛的一些知识点
  10. python读取Excel工作簿、工作表