`
天梯梦
  • 浏览: 13733376 次
  • 性别: 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常用函数总汇.pdf 高清

    在PHP中,变量的处理非常重要,能够直接影响到程序的逻辑和性能。 - **`isset()`**:用于判断变量是否存在且不为`null`。如果变量存在且非`null`,则返回`true`;否则返回`false`。 示例: ```php $var = ...

    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动态函数调用方法

    在PHP中,可以将函数名存储为一个字符串,然后通过`$variable()`的形式来调用这个函数。例如,在提供的代码示例中,创建了一个名为`sayHello`的函数,然后将字符串`"sayHello"`赋值给变量`$function_holder`,最后...

    2010年最新PHP类的精缩归纳:

    在上述例子中,`ClassName`是类的名字,`$variable1`和`$variable2`是成员变量,`__construct`是构造函数,`methodName`是普通方法。成员变量的访问修饰符可以是`public`(公开)、`private`(私有)或`protected`...

    PHP的变量类型和作用域详解

    - **全局(Global)**:在函数或类外部定义的变量具有全局作用域,可以在整个脚本中被访问,除非在函数内部使用`global`关键字显式引用。 - **局部(Local)**:在函数内部定义的变量具有局部作用域,只在该函数...

    JAVA必备英文单词.pdf

    * Member-variable: 成员变量 * Public: 公有的 * Package: 包 * Private: 私有的 * Import: 导入 * Parameter: 参数 * Member-function: 成员函数 * Protected: 受保护的 * Static: 静态的 * Void: 无(返回类型) ...

    scons接口函数

    根据提供的文件信息,本文将对"Scons接口函数"这一主题进行深入探讨,主要涉及SCons脚本开发中的接口函数及相关的类、方法和属性等内容。 ### SCons介绍 SCons是一个开源的构建工具,用于软件项目的编译和构建管理...

    PHP语法规范.docx编程资料

    1. **标识符**:PHP中的标识符可以由字母、数字和下划线组成,但是标识符的第一个字符必须是字母或下划线。 2. **变量**:PHP变量以美元符号 `$` 开头,后跟变量名。PHP是一种弱类型语言,这意味着在声明变量时不...

    快速学好php

    - 要在函数内部访问全局变量,需使用 `global $variable_name` 关键字。 13. **静态变量**: - 使用 `static` 关键字声明的变量在每次函数调用时保留其值,而不是重新初始化。 了解这些基础概念后,你可以开始...

    php之可变函数的实例详解

    在PHP编程语言中,可变函数(Variable Functions)是一个特性,允许我们使用变量来调用函数。这个功能在处理回调函数、动态调用方法或构建灵活的代码逻辑时非常有用。下面我们将深入探讨PHP可变函数的概念、用法以及...

    java必记单词

    - **定义**:声明是指在程序中指定变量、方法或类的存在及其类型。 - **应用场景**:在使用变量或方法之前必须先声明。 #### Derived Class 派生类/子类 - **定义**:派生类是从另一个类继承而来的类。 - **应用...

    php代码-PHP可变函数

    在PHP编程语言中,可变函数(Variable Functions)是一个非常重要的特性,它允许我们动态地调用函数。这种功能在处理动态数据或者需要根据某些条件执行不同操作的场景下非常有用。本文将深入探讨PHP可变函数的概念、...

    php入门文档

    - **标识符**:PHP 中的标识符可以包含字母、数字和下划线,但必须以字母或下划线开头。标识符是不区分大小写的,但习惯上通常采用小写字母。 - **变量**:所有 PHP 变量都以 `$` 符号开头。例如,`$name` 表示一个...

    ABAP语法详解教材

    1. 报头部分:定义程序的全局变量、接口和类,如`CLASS`、`INTERFACE`和`PROGRAM`。 2. 方法定义:定义函数和过程,如`FUNCTION`、`METHOD`。 3. 主程序:程序执行的起点,通常包含在`START-OF-SELECTION`和`END-OF-...

    php 可变函数使用小结

    在 PHP 中,可变函数是一种特性,允许我们使用变量来调用函数。这一特性使得代码更加灵活,可以适应多种情况,比如回调函数和动态方法调用。本文将深入探讨 PHP 可变函数的概念、用法及其注意事项。 首先,我们要...

    Python Interview

    鸭子类型是一种基于行为而不是类型或类的编程概念。如果一个对象看起来像鸭子,走起来像鸭子,叫声像鸭子,那么它很可能就是一只鸭子。换句话说,如果一个对象拥有与其他对象相似的行为,那么就可以认为它们是同一个...

    JavaScript私有变量实例详解

    在上面的构造函数模式中,`publicMethod`是一个特权方法,它是一个闭包,可以访问并修改`privateVariable`,而外部只能通过`publicMethod`间接访问。 除了构造函数模式,还可以使用**静态私有变量模式**。这种方法...

Global site tag (gtag.js) - Google Analytics