如果对象在同一个类中实例化,则可以公开调用私有函数

时间:2010-03-04 06:38:24

标签: php oop

<?php
 //5.2.6
class Sample {
    private function PrivateBar() {
      echo 'private called<br />';
    }

    public static function StaticFoo() {
      echo 'static called<br />';
      $y = new Sample();
      $y->PrivateBar();
    }
 }

 Sample::StaticFoo();
?>

上面的代码将输出:

"static called
 private called"

为什么$ y-&gt; PrivateBar();不抛出错误?毕竟这是一项私人活动。

这背后的面向对象设计逻辑是什么?这是PHP独有的,还是这个标准的OOP?

3 个答案:

答案 0 :(得分:1)

  

为什么$ y-&gt; PrivateBar();不要扔   一个错误?这是一个私人功能   毕竟。

私有函数在类中使用它们时不会抛出错误,它们会在类的一侧访问时抛出错误。

  

什么是面向对象的设计   这背后的逻辑?这是独一无二的   PHP,还是这个标准的OOP?

它不是PHP独有的,是标准的OOP。

答案 1 :(得分:1)

因为StaticFoo虽然是静态的,但仍然被认为是Sample类的一部分。

这也可以在C#中重现:

public class Sample
{
    private void PrivateBar()
    {
        Console.WriteLine("private called\r\n");
    }

    public static void StaticFoo()
    {
        Console.WriteLine("static called\r\n");
        Sample y = new Sample();
        y.PrivateBar();
    }
}

class Program
{
    static void Main(string[] args)
    {
        Sample.StaticFoo();
        Console.Read();
    }
}

输出:

static called

private called

答案 2 :(得分:0)

  

实际上你是在类中调用private方法,所以它不会抛出错误。

     

如果你在课堂上做同样的事情,它会抛出错误。