在 PHP 中扩展 class
Extend class in PHP
我正在尝试扩展 class:
class CustomParsedown extends Parsedown {
protected function blockComment($Line) { return; }
protected function blockCommentContinue($Line, array $Block) { return; }
protected function blockHeader($Line) { return; }
protected function blockSetextHeader($Line, array $Block = NULL) { return; }
}
function markdown($markdown) {
return CustomParsedown::instance()->setMarkupEscaped(true)->text($markdown);
}
如果我 运行 markdown()
使用另一个页面的 markdown,代码中的更改不会生效。例如,我仍然可以创建一个标题。我是否正确扩展了 class?
看起来 Parsedowns static function instance()
正在引用 $instance = new self();
这意味着它将实例化一个新的 Parsedown
class 而不是您的扩展 class.
尝试将他们的实例方法复制到您的 class 中,我也将 new self
更改为 new static
。
class CustomParsedown extends Parsedown {
static function instance($name = 'default')
{
if (isset(self::$instances[$name]))
{
return self::$instances[$name];
}
$instance = new static();
self::$instances[$name] = $instance;
return $instance;
}
private static $instances = array();
}
https://github.com/erusev/parsedown/blob/master/Parsedown.php
另见 New self vs. new static
我正在尝试扩展 class:
class CustomParsedown extends Parsedown {
protected function blockComment($Line) { return; }
protected function blockCommentContinue($Line, array $Block) { return; }
protected function blockHeader($Line) { return; }
protected function blockSetextHeader($Line, array $Block = NULL) { return; }
}
function markdown($markdown) {
return CustomParsedown::instance()->setMarkupEscaped(true)->text($markdown);
}
如果我 运行 markdown()
使用另一个页面的 markdown,代码中的更改不会生效。例如,我仍然可以创建一个标题。我是否正确扩展了 class?
看起来 Parsedowns static function instance()
正在引用 $instance = new self();
这意味着它将实例化一个新的 Parsedown
class 而不是您的扩展 class.
尝试将他们的实例方法复制到您的 class 中,我也将 new self
更改为 new static
。
class CustomParsedown extends Parsedown {
static function instance($name = 'default')
{
if (isset(self::$instances[$name]))
{
return self::$instances[$name];
}
$instance = new static();
self::$instances[$name] = $instance;
return $instance;
}
private static $instances = array();
}
https://github.com/erusev/parsedown/blob/master/Parsedown.php
另见 New self vs. new static