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

Php 如果对象在同一类中实例化,则可以公开调用私有函数,php,oop,Php,Oop,为什么$y->PrivateBar();不抛出错误?这毕竟是一个私人的功能 这背后的面向对象设计逻辑是什么?这是PHP独有的还是标准的OOP 实际上,您正在调用类中的私有方法,以便它不会抛出错误 如果你在课堂外做同样的事情,它会抛出错误 为什么$y->PrivateBar();不扔 错误?这是一项私人活动 毕竟 私有函数在类内部使用时不会抛出错误,在类外部访问时会抛出错误 什么是面向对象设计 这背后的逻辑?这是唯一的吗 PHP,还是这是标准的OOP 它不是PHP独有的,是标准的OOP。因为Sta

为什么$y->PrivateBar();不抛出错误?这毕竟是一个私人的功能

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

实际上,您正在调用类中的私有方法,以便它不会抛出错误

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

为什么$y->PrivateBar();不扔 错误?这是一项私人活动 毕竟

私有函数在类内部使用时不会抛出错误,在类外部访问时会抛出错误

什么是面向对象设计 这背后的逻辑?这是唯一的吗 PHP,还是这是标准的OOP


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

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

这也可以在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();
    }
}

$this在静态函数中为null。
"static called
 private called"
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