我有一个包含一堆私有属性的子类。父类有__SET
& __GET
方法。
父__SET
方法有filter_var($var, FILTER_CALLBACK, ['options' => 'childMethod');
,但始终失败,错误为filter_var(): First argument is expected to be a valid callback
请参阅下面的示例代码,您可以将其复制并粘贴到http://phpfiddle.org/lite/
中for" childMethod"我尝试过使用:
$this->childMethod()
$this->childMethod
this->childMethod
this->childMethod()
childMethod()
childMethod
所有错误
<?php
abstract class a {
public function callChild() {
$var = $this->iAmChild();
echo $var."<br />";
echo filter_var($var, FILTER_CALLBACK, ["options" => 'this->callback'])."<br />";
echo $this->callback($var)."<br />";
}
// abstract function callback();
}
class b extends a {
public function iAmChild() {
return "I am the child function";
}
public function callback($value) {
$value = strtoupper($value);
return $value;
}
}
$child = new b();
$child->callChild();
function convertSpace($string)
{
return str_replace(" ", "_", $string);
}
$string = "Peter is a great guy!";
echo filter_var($string, FILTER_CALLBACK,["options"=>"convertSpace"]);
?>
有可能吗?
每个子类都是数据库表的表示,所以我想过滤和控制&#34;设置&#34;属性。每个子类都有一个属性列表,以及一个或多个数组,它们为每个属性提供FILTER_*
类型。这适用于除FILTER_CALLBACK
之外的所有人。
如何将子方法作为回调函数传递给filter_var
?
答案 0 :(得分:1)
评论中提到的答案是改变第6行代码
echo filter_var($var, FILTER_CALLBACK, ["options" => 'this->callback'])."<br />";
到
echo filter_var($var, FILTER_CALLBACK, ["options" => [$this, 'callback'])."<br />";