php公共函数私有,php – 当父公共公用时,如何使子构造函数私有?

为什么不能在子类中隐藏构造函数?

我得到以下例外:

Fatal error: Access level to CIS\Logger\WPLogger::__construct() must

be public (as in class Katzgrau\KLogger\Logger) in

/builds/r2o/website/wp-content/mu-plugins/toolsets/lib/cis-logger/src/WPLogger.php

on line 12

超类代码(来自外部库):

public function __construct($logDirectory, $logLevelThreshold = LogLevel::DEBUG, array $options = array()) { // ...

}

代码WPLogger.php(子类):

private function __construct(string $logDirectory, string $logLevelThreshold = LogLevel::DEBUG, array $options = array()) {

parent::__construct($logDirectory, $logLevelThreshold, $options);

// ... some actions

}

}

public static function getInstance(string $logFileRelative = self::DEFAULT_LOG_NAME, string $logLevelThreshold = LogLevel::DEBUG, array $options = array()) {

// ...

}

我不希望这个特殊的子类用new实例化.我想用getInstance()静态创建它而不是出于某些原因.我怎样才能做到这一点?

解决方法:

您可以使用继承来扩展方法可见性.以下示例是正确的

class A

{

private function __construct()

{}

}

class B extends A

{

public function __construct()

{}

}

但是您无法限制子类中的方法可见性.以下示例不正确

class A

{

public function __construct()

{}

}

class B extends A

{

private function __construct()

{}

}

在您的情况下,您尝试隐藏构造函数,因为您要创建单例.在许多情况下,单身人士是不好的做法.你应该用

其他对象构建模式:Static Factory,Service Locator,Dependency Injection Container

例如,您可以通过简单修改静态工厂来归档必要的结果:

class LoggerFactory

{

private static $instance = null;

public static function build()

{

if (is_null(static::$instance)) {

static::$instance = // making of the logger

}

return static:$instance;

}

}

标签:php,class,oop,constructor,inheritance

来源: https://codeday.me/bug/20190827/1745554.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值