是否可以将方法添加到函数中?
例如:
<?
function func(){
;
}
//add method
func->test = function(){
;
}
func->test();
func();
我来自javascript背景,因此我习惯于"一切都是对象"。
编辑:
我只是在解释对新php的误解可能来自哪里。我知道上面的代码不起作用。
编辑2
想明白了。
class myfunc_class{
function __invoke(){
//function body
}
function __call($closure, $args)
{
call_user_func_array($this->$closure, $args);
}
}
$func = new myfunc_class;
$func->test = function(){
echo '<br>test<br>';
};
$func->test();
$func();
更性感:)
class func{
public $_function;
function __invoke(){
return call_user_func_array($this->_function,func_get_args());
}
function __construct($fun){
$this->_function = $fun;
}
function __call($closure, $args)
{
call_user_func_array($this->$closure, $args);
}
}
$func = new func(function($value){
echo $value;
});
$func->method = function(){
echo '<br>test<br>';
};
$func('someValue');
$func->method();
否。
并非所有东西都是PHP中的对象。事实上,唯一的物体就是物体。更具体地说,通常是一个类的实例化。
您的代码已转换为PHP
// function_object.php
<?php
class FunctionObject {
public method func() {
// do stuff
}
}
?>
在其他代码中,你会这样使用它:
<?php
// example.php in same folder as function_object.php
include 'function_object.php';
$FuncObj = new FunctionObject;
$FuncObj->func();
另外:阅读更多关于PHP的内容;OOP
否,因为对象与函数是不同的PHP语言构造。函数没有属性,而只是执行指令。
但是,如果func
是一个预定义的类,那么是的。。。有点巫术,无视公众的强烈抗议,放弃可读性和PHP编码标准,并通过使用__call()
魔术方法的闭包。。。
class func
{
function __call($func, $args)
{
return call_user_func_array($this->$func, $args);
}
}
$obj = new func;
$obj->test = function($param1, $param2)
{
return $param1 + $param2;
};
echo $obj->test(1,1);
如果没有__call()
,这将不会像您想象的那样工作,因为通过$obj->test(1,1)
,PHP认为您试图在对象范围之外调用不存在的func
方法。但在内部,由于新的"test"
属性是一种类型:闭包,call_user_func_array()
只是将"test"
属性视为另一个函数,因此您可以在外部范围内隐藏这一点技巧。
您需要函数func()
来返回一个对象,然后您可以执行以下操作:func()->test();
但请注意,您处理对象的方式在PHP中并不正确,我建议您阅读这里的OO文档。
与javascript不同的是,在PHP中并不是所有东西都是对象。因此,您需要区分函数和类。
如果您想创建一个对象,您需要首先定义类。
class myClass {
}
然后,您可以根据需要向类中添加任意数量的函数。但您需要首先定义它们:
class myClass {
function test() {
echo "test!'n";
}
}
当一切都准备好了,你就可以把它变成现实:
$class = new myClass;
$class->test();
查看手册了解更多信息。
您不能做您想做的事情,但您可以在其他函数中定义函数。
此示例输出文本:
function a() {
function b() { echo 'Hi'; }
}
a();
b();
Output: HiHi
此示例输出错误:
function a() {
function b() { echo 'Hi'; }
}
b();
Output: ERROR