Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 减少派生类中函数的访问级别_Php_Extends_Private Methods - Fatal编程技术网

Php 减少派生类中函数的访问级别

Php 减少派生类中函数的访问级别,php,extends,private-methods,Php,Extends,Private Methods,在PHP中,是否有可能降低派生类中函数的访问级别 示例(…意味着更多代码) 现在我应该不能调用MyFuncionabar对象了。但是这样做在PHP中似乎是无效的。还有别的办法吗?我知道我可以实现一个空函数,但我根本不想在接口中公开该函数。它在OOP中无论如何都是无效的。如果您实现了一个公共方法,那么您承诺该类和所有子类都提供此功能。删除公共方法意味着您违背了承诺;)因为所有公共方法和属性都定义了类的接口,破坏接口从来都不是一个好主意 如果没有关于您将要做什么的更清楚的信息,我建议只抛出一个异常,

在PHP中,是否有可能降低派生类中函数的访问级别

示例(…意味着更多代码)


现在我应该不能调用
MyFunc
iona
bar
对象了。但是这样做在PHP中似乎是无效的。还有别的办法吗?我知道我可以实现一个空函数,但我根本不想在接口中公开该函数。

它在OOP中无论如何都是无效的。如果您实现了一个公共方法,那么您承诺该类和所有子类都提供此功能。删除公共方法意味着您违背了承诺;)因为所有公共方法和属性都定义了类的接口,破坏接口从来都不是一个好主意


如果没有关于您将要做什么的更清楚的信息,我建议只抛出一个异常,比如“不受支持”。

我的想法是,我有一个抽象类,它有一个名为registerObject()的函数,然后我有一个扩展该类的类,还有一个名为registerForm()的函数这实际上只是调用parent::registerObject(),但对于所讨论的对象来说是一个更合适的名称。但你是对的,我想这是一个糟糕的做法:)。。。我可能应该创建一个受保护的函数registerObject(),然后在派生类中使用公共函数registerPerform(),依此类推。我们有两种方法来创建我们的异常实例。由于PHPs天生无法以优雅的方式重载_构造,我们想创建两个静态方法,即OurException::newA和OurException::newB(根据我的研究,这似乎是避免重载的一种相当标准的方法)。但是我们不希望人们使用“新的我们的例外”,所以我们希望使uuu构造受保护或私有。这是不可能的,因为Exception _构造是公共的…继续。遗憾的是,在抛出异常的过程中,在我们的上下文中抛出“不受支持”的异常是没有意义的。如果PHP能够可靠地重载构造函数,那么遵循上面提到的OOP“承诺”将更有意义。然而,如果没有干净的重载,无法“减少对_构造的可访问性”在我们的上下文中是非常有问题的……我真的不知道如何解决这个问题:(
class foo
{
  public function myFunction() { ... }
  public function myOtherFunction() { ... }
}

class bar extends foo
{
  private function myFunction() { ... }
}