`
天梯梦
  • 浏览: 13630133 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论

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

阅读更多

最终实例在下方

以前用过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: 在类(class)中加载动态函数, 变量函数或半变量函数 variable function/method

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    PHP函数参考手册大全

    Variable 变量函数 CL. Verisign Payflow Pro Functions CLI. vpopmail Functions CLII. W32api 函数 CLIII. WDDX Functions CLIV. xattr Functions CLV. xdiff Functions CLVI. XML 语法解析函数 CLVII. XML-RPC ...

    PHP5 完整官方 中文教程

    Variables — Variable 变量函数 Verisign Payflow Pro — Verisign Payflow Pro Functions vpopmail — vpopmail Functions W32api — W32api 函数 WDDX — WDDX Functions win32ps — win32ps Functions win32...

    PHP5中文参考手册

    Variables — Variable 变量函数 Verisign Payflow Pro — Verisign Payflow Pro Functions vpopmail — vpopmail Functions W32api — W32api 函数 WDDX — WDDX Functions win32ps — win32ps Functions win32...

    php帮助文档,php。chm,php必备的中文手册

    Variable 变量函数 CLV. Verisign Payflow Pro Functions CLVI. vpopmail Functions CLVII. W32api 函数 CLVIII. WDDX Functions CLIX. win32service Functions CLX. xattr Functions CLXI. xdiff Functions CLXII....

    中文版PHP使用手册

    Variable 变量函数 CL. Verisign Payflow Pro Functions CLI. vpopmail Functions CLII. W32api 函数 CLIII. WDDX Functions CLIV. xattr Functions CLV. xdiff Functions CLVI. XML 语法解析函数 CLVII. XML-RPC ...

    PHP手册2007整合中文版

    Variable 变量函数 CLXXII. Verisign Payflow Pro Functions CLXXIII. vpopmail Functions CLXXIV. W32api 函数 CLXXV. WDDX Functions CLXXVI. win32ps Functions CLXXVII. win32service Functions CLXXVIII. ...

    PHP5 开发手册 简体中文手册

    Variable 变量函数 CLIV. Verisign Payflow Pro Functions CLV. vpopmail Functions CLVI. W32api 函数 CLVII. WDDX Functions CLVIII. win32service Functions CLIX. xattr Functions CLX. xdiff Functions CLXI. ...

    php手册.chm,php手册

    Variable 变量函数 CL. Verisign Payflow Pro Functions CLI. vpopmail Functions CLII. W32api 函数 CLIII. WDDX Functions CLIV. xattr Functions CLV. xdiff Functions CLVI. XML 语法解析函数 CLVII. XML-RPC ...

    php手册PHP5研究室编无乱码版本chm

    Variable 变量函数 CL. Verisign Payflow Pro Functions CLI. vpopmail Functions CLII. W32api 函数 CLIII. WDDX Functions CLIV. xattr Functions CLV. xdiff Functions CLVI. XML 语法解析函数 CLVII. ...

    PHP官方手册中文版

    Variable 变量函数 CLXXII. Verisign Payflow Pro Functions CLXXIII. vpopmail Functions CLXXIV. W32api 函数 CLXXV. WDDX Functions CLXXVI. win32ps Functions CLXXVII. win32service Functions ...

    经典收藏最全php5.0查询手册

    Variable 变量函数 CL. Verisign Payflow Pro Functions CLI. vpopmail Functions CLII. W32api 函数 CLIII. WDDX Functions CLIV. xattr Functions CLV. xdiff Functions CLVI. XML 语法解析函数 CLVII. XML-RPC ...

    PHP手册(带评论版-2008-03-14).part2.rar

    Variable 变量函数 CL. Verisign Payflow Pro Functions CLI. vpopmail Functions CLII. W32api 函数 CLIII. WDDX Functions CLIV. xattr Functions CLV. xdiff Functions CLVI. XML 语法解析函数 CLVII. XML-RPC ...

    PHP手册(带评论版-2008-03-14).part1.rar

    Variable 变量函数 CL. Verisign Payflow Pro Functions CLI. vpopmail Functions CLII. W32api 函数 CLIII. WDDX Functions CLIV. xattr Functions CLV. xdiff Functions CLVI. XML 语法解析函数 CLVII. XML-RPC ...

    delphi编译错误.txt

    Bad argument type in variable type array constructor 在变量类型数组结构中不正确的参数类型 Bad file format ''''&lt;name&gt;'''' 错误的文件格式 Bad file format: &lt;Filename&gt; 错误的文件格式 Bad global symbol ...

    人工智能词汇.doc

    Bayesian regularization method 贝叶斯规则化方法 Bernoulli random variable 伯努利随机变量 bias term 偏置项 binary classfication 二元分类 class labels 类型标记 concatenation 级联 conjugate gradient 共轭...

    jQuery完全实例.rar

    这个函数的作用如同$(document).ready()一样,只不过用这个函数时,需要把页面中所有需要在 DOM 加载完成时执行的$()操作符都包装到其中来。从技术上来说,这个函数是可链接的--但真正以这种方式链接的情况并不多...

    人工智能词汇.docx

    Bernoulli random variable 伯努利随机变量 classification problem 分类问题 bias term 偏置项 discreet value 失散值 binary classfication 二元分类 support vector machines 支持向量机 class labels 种类标记 ...

    非Access数据库在VB中的编程及应用

    Windows API接口函数在Kernel.exe动态链接库中提供了一个OSWritePrivateProfileString函数,此函数能按Windows下配置文件(.INI)的书写格式写入信息。 在通常情况下,应用程序还需要在运行时读取配置文件内相关项...

    freemarker总结

    l 可以使用assign指令在导入的名字空间中创建或替代变量,下面是一个例子: &lt;#import "/lib/my_test.ftl" as my&gt; ${my.mail} ${my.mail} l 输出结果: jsmith@acme.com jsmith@other.com l 数据...

Global site tag (gtag.js) - Google Analytics