Как вызвать дочерний метод из обратного вызова filter_var в parent - PullRequest
0 голосов
/ 24 мая 2018

У меня есть дочерний класс, который содержит множество частных свойств.Родительский класс имеет методы __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/

Для "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"]);
?>

Возможно ли это?

Каждый дочерний класс является представлением таблицы базы данных, поэтому я хочу отфильтровать и контролировать "настройку" свойств.Каждый дочерний класс имеет список свойств, а также массив или массивы, которые предоставляют тип FILTER_* для использования для каждого свойства.это работает для всех из них, кроме FILTER_CALLBACK.

Как передать дочерний метод в качестве функции обратного вызова в filter_var?

1 Ответ

0 голосов
/ 25 мая 2018

Ответ, как отмечено в комментариях, состоял в том, чтобы изменить шестую строку кода с
echo filter_var($var, FILTER_CALLBACK, ["options" => 'this->callback'])."<br />";
на
echo filter_var($var, FILTER_CALLBACK, ["options" => [$this, 'callback'])."<br />";

...