是否可以向函数添加方法?
例如:
<?
function func(){
;
}
//add method
func->test = function(){
;
}
func->test();
func();
我来自javascript背景,因此我习惯'一切都是对象'。
编辑:
我只是在解释新词的误解可能来自何处。我理解上面的代码不起作用。
编辑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();
答案 0 :(得分:3)
没有
并非所有东西都是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();
答案 1 :(得分:1)
不,因为对象是一种与函数不同的PHP语言结构。函数没有属性,而只是执行指令。
但是,如果func
是一个预定义的类,那么是......带有一点巫术,忽略公众的强烈抗议,提高可读性和PHP编码标准,并使用closures __call()
magic method ...
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"
属性看作另一个函数,所以你可以从外面隐藏这一点诡计范围。
答案 2 :(得分:0)
您需要使用函数func()
来返回一个对象,然后您就可以执行以下操作:func()->test();
但请注意,您在PHP中处理对象的方式不正确,我建议您阅读OO文档here。
答案 3 :(得分:0)
与javacript不同,在PHP中并非所有东西都是对象。因此,您需要在功能和类别之间有所不同。
如果要创建对象,则需要先定义该类。
class myClass {
}
然后,您可以根据需要向该类添加任意数量的函数。但是你需要首先定义它们:
class myClass {
function test() {
echo "test!\n";
}
}
当一切准备就绪时,你可以把它变为现实:
$class = new myClass;
$class->test();
答案 4 :(得分:0)
你无法做你想做的事,但你可以在其他功能中定义功能。
此示例输出文字:
function a() {
function b() { echo 'Hi'; }
}
a();
b();
Output: HiHi
此示例输出错误:
function a() {
function b() { echo 'Hi'; }
}
b();
Output: ERROR