以下のコードでは、コールバック関数 'cb'の内部でオブジェクト参照変数$ thisにアクセスする方法を見つけるのが苦労しています。私は「CB」関数の中から「大胆な」メソッドを呼び出すことができるようにしたいと思い、エラーに
Fatal error: Using $this when not in object context
を取得しています。
<?php
class Parser
{
private function bold($text)
{
return '<b>' . $text . '</b>';
}
// Transform some BBCode text containing tags '[bold]' and '[/bold]' into HTML
public function transform($text)
{
function cb($matches)
{
// $this not valid here
return $this->bold($matches[1]);
}
$html = preg_replace_callback('/\[bold\]([\w\x20]*)\[\/bold\]/', 'cb', $text);
return $html;
}
}
$t = "This is some test text with [bold]BBCode tags[/bold]";
$obj = new Parser();
echo $obj->transform($t) . "\n";
?>
代わりにself :: boldを使用してください。$ this->太字 –
PHPで認識されています - _named関数はネストできません!_匿名関数のためパーサーはエラーをスローしません。代わりに、それを抽出してグローバル空間に配置します。 ; - /それはクラスのメソッドとして置かれません; -/imo、_neverはPHP._imoで名前付きの関数/メソッドをネストしません。クラスのメソッドにするだけですか? –
@JorgeMejiaがテストしました.-致命的なエラー:クラススコープがアクティブでないときにself ::にアクセスできません。しかし、@ fusion3kのソリューションが動作します – tcdaly