如何从父级的filter_var回调中调用子方法

时间:2018-05-24 20:16:57

标签: php filter-var

我有一个包含一堆私有属性的子类。父类有__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

1 个答案:

答案 0 :(得分:1)

评论中提到的答案是改变第6行代码 echo filter_var($var, FILTER_CALLBACK, ["options" => 'this->callback'])."<br />";

echo filter_var($var, FILTER_CALLBACK, ["options" => [$this, 'callback'])."<br />";