`

php的magic之__call()

    博客分类:
  • php
阅读更多
很喜欢ruby的一些magic,php的magic相对要少很多,最大的magic应该算__call()这个魔法方法了,这个功能和ruby的 method_missing很相似,虽然它的目的是提供动态的重载功能,但事实上__call能够带来除"动态重载"外更多的魔法和动态性:
我们看看一个例子,我们常常使用php的system来执行一些系统的命令:
system("ls -l",$ret);
我们希望可以很爽的使用:
$cmd->ls("-l");
$cmd->ps();
$cmd->mkdir("test_dir");
好的,那我们使用这个魔法来实现我们的语法糖的效果吧:
<?php
class CommandWrapper{
	public function __call($method,$args){
		$cmd = $method . " " . implode(" ",$args);
		system($cmd,$ret);
		return $ret;	
	}
}

$cw = new CommandWrapper();
$cw->ls('-l');
$cw->mkdir('test');
$cw->pwd();
?>

这段代码用ruby实现,可以这么做:
class CommandWrapper
	def method_missing(method,*args)
		system(method.to_s,*args)
	end
end

cw = CommandWrapper.new
p cw.ls
p cw.pwd
p cw.ls '-l'
0
0
分享到:
评论

相关推荐

    遭遇了"Call to undefined function socket_create()"所需dll文件

    复制 php_sockets.dll 到ext目录 修改php.ini: extension=php_sockets.dll php4ts.dll php5ts.dll php_mime_magic.dll复制到C:\winnt\system32文件夹。 服务器

    CentOS+Nginx+PHP+MySQL配置详解.pdf

    allow_call_time_pass_reference = Off safe_mode = Off safe_mode_gid = Off safe_mode_include_dir = safe_mode_exec_dir = safe_mode_allowed_env_vars = PHP_ safe_mode_protected_env_vars = LD_LIBRARY_PATH ...

    PHP类中的魔术方法(Magic Method)简明总结

    主要介绍了PHP类中的魔术方法(Magic Method)简明总结,这些方法包括__construct()、__destruct()、__call()、__callStatic()、__get()、__set()、__toString()等,需要的朋友可以参考下

    magic

    标题中的“magic”可能指的是PHP中的魔术常量或魔术方法,这些都是PHP编程中特定情境下自动调用的特殊函数或标识。在PHP中,魔术常量以两个下划线开头和结尾(例如 __FILE__, __LINE__, __CLASS__ 等),它们提供了...

    php面向对象程序设计类.zip

    除了`__get()`和`__set()`,PHP还有其他魔术方法,如`__construct()`(构造函数)、`__destruct()`(析构函数)、`__call()`(调用不存在的方法)等,它们都为面向对象编程提供了更多可能性。在实际开发中,熟练掌握...

    php-5.3.14.tar

    此外,还支持了魔术方法(Magic Methods),如__call()和__get(),增强了类的动态行为。 6. **SPL(Standard PHP Library)** PHP 5.3.14包含SPL库,提供了一系列内置的类和接口,用于处理常见的编程任务,如迭代...

    基于PHP的13行代a_l的PHP框架源码.zip

    5. **魔术方法(Magic Methods)**:PHP的魔术方法如`__construct`、`__call`等,可以用来实现一些特殊行为。这13行代码可能利用了魔术方法来简化框架的初始化或错误处理。 6. **自动加载(Autoloading)**:PHP的`spl_...

    PHP高级编程

    3. **魔术方法(Magic Methods)**:如`__construct`, `__destruct`, `__call`, `__get`, `__set`等,它们在特定上下文中自动调用,增强了代码的动态性和灵活性。 4. **异常处理(Exception Handling)**:通过使用...

    深入php面向对象、模式与实践.pdf

    - `call_user_func_array` 函数用于动态调用函数并传递参数,这是实现回调函数的关键。 6. **设计模式** - 书中可能涵盖了如策略模式、观察者模式、装饰器模式等常见的设计模式,这些模式在实际开发中用于解决...

    php.ini 中文英文对照详细配置手册.txt

    allow_call_time_pass_reference = Off - **功能**:控制是否允许在函数调用时传递引用,禁用可以避免潜在的代码复杂性和错误。 - **建议**:禁用,使用现代的参数传递方式。 #### 结论 `php.ini`配置文件是PHP...

    php代码-PHP中一__开头的属性

    在PHP编程语言中,以`__`(双下划线)开头的属性和方法被称为魔术方法(Magic Methods)。这些特殊的方法是由PHP自动调用的,它们在特定的情况下被触发,例如对象创建、属性访问、方法调用等。了解并熟练运用这些...

    PHP高级开发详细思维导图18张

    - __call, __callStatic:调用未定义方法的处理。 7. **数据库操作** - PDO(PHP Data Objects):提供统一的API来连接多种数据库。 - ORM(对象关系映射):如Doctrine,将数据库表映射为PHP对象。 - SQL优化...

    那些年我们错过的魔术方法(Magic Methods)

    __destruct(),__call(),__callStatic(),__get(),__set(),__isset(),__unset(),__sleep(),__wakeup(),__toString(),__invoke(),__set_state() 和 __clone() 等方法在 PHP 中被称为”魔术方法”(Magic ...

    php语法之php常用类

    魔术方法是PHP预定义的一些特殊方法,如`__get`、`__set`、`__call`等,它们在特定情况下自动调用。 9. **静态属性与方法** 使用`static`关键字声明的属性或方法属于类本身,而非类的实例。直接通过类名调用静态...

    php5面向对象教程【技术文档】

    9. 魔法方法(Magic Methods):如`__get`、`__set`、`__call`等,它们在特定条件下自动调用,提供了更多灵活性。 10. 类常量(Class Constants):类中定义的常量,其值在整个类的生命周期中保持不变。 通过理解...

    Curso_POO_PHP_5.6_do_CEV:PHP 5.6 POO课程视频课程-瓜纳巴拉教授

    7. 魔法方法(Magic Methods):如__construct()构造方法用于对象初始化,__destruct()用于对象销毁,以及__get(), __set(), __call()等,提供对对象属性和方法的特殊操作。 8. 名称空间(Namespaces):解决大项目...

    PHP Objects Patterns and Practice(5th)

    - __call() 和 __callStatic():处理未定义的方法调用。 - __construct() 和 __destruct():对象生命周期中的关键方法。 - __toString():返回对象的字符串表示。 6. SPL(Standard PHP Library): - SPL提供...

    php初级编程的例子,面向对象的封装很适合

    9. 魔法方法(Magic Methods):PHP提供了一些预定义的特殊方法,如`__get`, `__set`, `__call`, `__toString`等,它们在特定情况下自动调用,帮助处理一些常规操作。 以上就是关于PHP面向对象编程中封装的基本知识...

Global site tag (gtag.js) - Google Analytics