PHP中的__call和__callStatic方法
如何防止调用不存在的方法而出错,使用__call魔术重载方法.
- <?php
- class HandsonBoy
- {
- private $name = 'chenqionghe';
- private $age = 18;
- public function __call($name,$arguments)
- {
- switch(count($arguments))
- {
- case 2:
- echo $arguments[0] * $arguments[1],PHP_EOL;
- break;
- case 3:
- echo array_sum($arguments),PHP_EOL;
- break;
- default:
- echo '参数不对',PHP_EOL;
- break;
- }
- }
- }
- $a = new HandsonBoy();
- $a->make(5);
- $a->make(5,6);
- <?php
- abstract class ActiveRecord
- {
- protected static $table;
- protected $fieldvalue;
- public $select;
- static function findById($id)
- {
- $query = "SELECT * FROM " . static::$table . " WHERE id=$id";
- return self::createDomain($query);
- }
- function __get($fieldname)
- {
- return $this->fieldvalues[$fieldname];
- }
- static function __callStatic($method,$args)
- {
- $field = preg_replace('/^findBy(\w*)$/', '$1' , $method);
- $query = "SELECT * FROM " . static::$table . " WHERE $field='$args[0]'";
- return self::createDomain($query);
- }
- private static function createDomain($query)
- {
- $class = get_called_class();//获取静态方法调用的类名
- $domain = new $class();
- $domain->fieldvalues = array();
- $domain->select = $query;
- foreach ($class::$fields as $field => $type)
- {
- $domain->fieldvalues[$field] = 'TODO:set from sql result by ' . $field;
- }
- return $domain;
- }
- }
- class Customer extends ActiveRecord
- {
- protected static $table = 'custdb';
- protected static $fields = array(
- 'id' => 'int',
- 'email' => 'int',
- 'lastname' => 'varchar'
- );
- }
- class Sales extends ActiveRecord
- {
- protected static $table = 'salesdb';
- protected static $fields = array(
- 'id' => 'int',
- 'item' => 'varchar',
- 'qty' => 'int'
- );
- }
- var_dump(Customer::findById(123)->select);
- var_dump(Customer::findById(123)->email);
- var_dump(Sales::findByLastname('Denoncourt')->select);
PHP中的__call和__callStatic方法的更多相关文章
- PHP中的__call和__callStatic方法(未看完)
如何防止调用不存在的方法而出错,使用__call魔术重载方法. __call方法原型如下: mixed __call(string $name,array $arguments) 当调用一个不可访问的 ...
- PHP 魔术方法 __call 与 __callStatic 方法
PHP 魔术方法 __call 与 __callStatic 方法 PHP 5.3 后新增了 __call 与 __callStatic 魔法方法. __call 当要调用的方法不存在或权限不足时,会 ...
- php中__call() 和 __callStatic方法的使用
__call 与__callStatic 魔法方法是php5.3后新增的,二者的应用场景: 1.当要调用的方法不存在或权限不足时,会自动调用__call 方法. 2.当调用的静态方法不存在或权限不足时 ...
- __call()和__callStatic()方法
__call() 当对象访问不存在的方法时,__call()方法会被自动调用__callStatic() 当对象访问不存在的静态方法时,__callStatic()方法会被自动调用 这两个方法在PHP ...
- PHP魔术方法之__call与__callStatic方法
<?php class human{ private function t(){ } //魔术方法__call /* $method 获得方法名 $arg 获得方法的参数集合 */ public ...
- 魔术方法之__call与__callStatic方法
<?php class human{ private function t(){ } /** * 魔术方法__call * * @param string $method 获得方法名 * @pa ...
- PHP中的11个魔术方法总结:__construct,、__destruct、__call等
PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep ...
- php中__call与__callstatic()使用
php 5.3 后新增了 __call 与__callStatic 魔法方法. __call 当要调用的方法不存在或权限不足时,会自动调用__call 方法. __callStatic 当调用的静态方 ...
- PHP中的11个魔术方法
1.__get.__set 这两个方法是为在类和他们的父类中没有声明的属性而设计的 __get( $property ) 当调用一个未定义的属性时访问此方法__set( $property ...
随机推荐
- 走进JDK(十一)------LinkedHashMap
概述LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题.除此之外,LinkedHas ...
- formdata的使用方法
function upload_single_file(value){ if(value==''){ layer.msg('请添加文件',{time:1500}) }else{ var formDat ...
- jQuery源码框架fn解读
(function( window, undefined ){ var jQuery = (function(){ var jQuery = function( selector, context ) ...
- springmvc 整合Controller出现实例化两次问题
启动项目的时候,发现初始化控制层的时候,初始化(使用构造方法打印日志的方式)了两次的情况. 后来检查配置: <context:component-scan base-package=" ...
- Javascript Engine, Java VM, Python interpreter, PyPy – a glance
提要: url anchor (ajax) => javascript engine (1~4 articles) => java VM vs. python interpreter =& ...
- eclipse 带sts插件
https://pan.baidu.com/s/1c1M11ss 密码:ucjl
- 大数据开发主战场hive (企业hive应用)
hive在大数据套件中占很的地位,分享下个人经验. 1.在hive日常开发中,我们首先面对的就是hive的表和库,因此我要先了解库,表的命名规范和原则 如 dwd_whct_xmxx_m 第1部分为表 ...
- CSS中清除浮动的作用以及如何清除浮动
1.什么是浮动,浮动的作用 “浮动”从字面上来理解就是“悬浮移动.非固定”的意思.块级元素(div.table.span…)是以垂直方向排列,而在前端界面中往往要使用水平布局块级元素使界面更美观.这就 ...
- zookeeper原理与安装
Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目. 1. Zookerper工作机制 2. Zookeeper工作特点 3. Zookeeper文件系统: ...
- delphi压缩与解压_不需要特别的控件
unit unzip; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...