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);
参考:https://jingyan.baidu.com/article/48a42057fd2890a92425043c.html
转:https://www.cnblogs.com/chenqionghe/p/4735703.html?tvd
参考:http://www.php.net/manual/zh/language.oop5.magic.php
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 当要调用的方法不存在或权限不足时,会 ...
- Linux中find命令用法全汇总,看完就没有不会用的!
Linux中find命令用法全汇总,看完就没有不会用的! 中琦2513 马哥Linux运维 2017-04-10 糖豆贴心提醒,本文阅读时间7分钟 Linux 查找命令是Linux系统中最重要和最 ...
- 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 ...
- JS做类型检测到底有几种方法?看完本文就知道了!
JS有很多数据类型,对于不同数据类型的识别和相互转换也是面试中的一个常考点,本文主要讲的就是类型转换和类型检测. 数据类型 JS中的数据类型主要分为两大类:原始类型(值类型)和引用类型.常见的数据类型 ...
- 如果你每次面试前都要去背一篇Spring中Bean的生命周期,请看完这篇文章
前言 当你准备去复习Spring中Bean的生命周期的时候,这个时候你开始上网找资料,很大概率会看到下面这张图: 先不论这张图上是否全面,但是就说这张图吧,你是不是背了又忘,忘了又背? 究其原因在于, ...
- 魔术方法之__call与__callStatic方法
<?php class human{ private function t(){ } /** * 魔术方法__call * * @param string $method 获得方法名 * @pa ...
随机推荐
- NHibernate使用MemCache二级缓存
首先,当然是安装MemCache服务器端了. 然后配置过程,仅仅两个问题. 1.NHibernate要与NHibernate.Cache的版本要一致.否则,NHibernate.Caches.MemC ...
- minGW cygwin gnuwin32
首先,三个的官方网站分别是: minGW:http://www.mingw.org cygwin: http://www.cygwin.com gnuwin32: https://sourcefo ...
- Tikhonov regularization和岭回归
就实现过程来讲,两者是一样的,都是最小二乘法的改进,对于病态矩阵的正则化,只不过分析的角度不一样,前者是解决机器学习中过拟合问题,机器学习一般是监督学习,是从学习角度来说的,后者是数学家搞的,是为了解 ...
- DockManager
Devexpress----DockManager类似VS左右上下浮动栏停靠DockManager->Customize->DockPanel->NEW->Text='详细': ...
- iOS-Runtime、对象模型、消息转发
Objective-C只是在C语言层面上加了些关键字和语法.真正让Objective-C如此强大的是它的运行时.它很小但却很强大.它的核心是消息分发. Message 执行一个方法,有些语言.编译器会 ...
- Mock -- 数据模拟
作者:张云龙链接:https://www.zhihu.com/question/35436669/answer/62753889来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- JAVA应用获取本机IP
在应用开发的时候如何获取本机的IP呢? 本人在开发一个线上系统的时候有这样的需求,办法很简单啊,google一下,于是乎有了下面的代码: 方案一: Enumeration<NetworkInte ...
- distance field(占坑
signed distance field https://kosmonautblog.wordpress.com/2017/05/09/signed-distance-field-rendering ...
- wamp php.ini 配置的坑
wampserver是windows平台下一键部署PHP+apache+MySQL的开发环境安装包,非常方便,但修改php.ini时需要注意,wamp目录下有两个php.ini, 第一个是apatch ...
- animateBackground-plugin
(function ($) { if (!document.defaultView || !document.defaultView.getComputedStyle) { var oldCurCSS ...