我有一个基于一些事情生成数据的类。我想从外部格式化这些数据。所以我试图将一个函数传递给类,以便格式化该数据。我看了很多例子,但看起来这是独一无二的。
任何人都可以知道如何做到这一点?以下代码给出了错误。
<?php
class someClass {
var $outsideFunc; // placeholder for function to be defined from outside
var $somevar='Me'; // generated text
function echoarg($abc){
$outsideFunc=$this->outsideFunc; // bring the outside function in
call_user_func($outsideFunc,$abc); // execute outside function on text
echo $abc;
}
}
function outsidefunc($param){ // define custom function
$param='I am '.$param;
}
$someClass=new someClass();
$someClass -> outsideFunc = 'outsideFunc'; // send custom function into Class
$someClass -> echoarg($someClass->somevar);
答案 0 :(得分:1)
为什么不将你的函数作为参数传递?
<?php
class someClass {
public $somevar="Me";
public function echoarg($abc,$cb=null) {
if( $cb) $cb($abc);
echo $abc;
}
}
$someClass = new someClass();
$someClass->echoarg($someClass->somevar,function(&$a) {$a = "I am ".$a;});
答案 1 :(得分:1)
$someClass -> outsidefunc = 'outsidefunc';
在PHP中,函数名称不区分大小写,但对象属性名称是。您需要$someClass->outsideFunc
,而不是$someClass->outsidefunc
。
请注意,良好的OOP设计实践需要使用getter and setter methods而不是直接从外部代码访问属性。另请注意,PHP 5.3引入了对anonymous functions的支持。
呀。你是对的。现在没有错误。但它也不起作用。
默认情况下,PHP不会pass arguments by reference; outsidefunc()实际上并没有做任何有用的事情。如果您希望它将调用者中的$ param设置为其他内容,并且不想只返回新值,则可以将函数签名更改为如下所示:
function outsidefunc(&$param) {
您还需要更改调用该函数的方式,如call_user_func() does not allow you to pass arguments by reference。这两种方式都应该有效:
$outsideFunc($abc);
call_user_func_array($outsideFunc, array(&$abc));
答案 2 :(得分:0)
我不确定你究竟在寻找什么,但我得到的是,你想在一个可以通过以下方式实现的功能中传递对象 PHP中的Type Hinting。
class MyClass {
public $var = 'Hello World';
}
function myFunction(MyClass $foo) {
echo $foo->var;
}
$myclass = new MyClass;
myFunction($myclass);
答案 3 :(得分:0)
$myClass->addFunc(function($arg) { return 'test: ' . $arg });
$myClass->execFunc(0);
class myClass {
protected $funcs;
public function addFunc(closure $func) {
$this->funcs[] = $func;
}
public function execFunc($index) { $this->funcs[$index](); } // obviously, do some checking here first.
}