Закрытые функции можно вызывать публично, если объект создается в одном и том же классе - PullRequest
3 голосов
/ 04 марта 2010
<?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-> PrivateBar (); не скинуть ошибку? В конце концов, это частная функция.

Какая логика объектно-ориентированного проектирования стоит за этим? Это уникально для PHP или это стандартная ООП?

Ответы [ 3 ]

1 голос
/ 04 марта 2010

Почему $ y-> PrivateBar ();не скинуть ошибку?В конце концов, это закрытая функция.

Закрытая функция не выдает ошибку, когда вы используете их внутри класса, она выдает ошибку при доступе вне класса.

Какая логика объектно-ориентированного проектирования стоит за этим?Это уникально для PHP, или это стандартный ООП?

Он не уникален для PHP и является стандартным ООП.

1 голос
/ 04 марта 2010

Поскольку 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
0 голосов
/ 04 марта 2010

На самом деле вы вызываете закрытый метод в классе, чтобы он не выдавал ошибку.

Если вы сделаете то же самое из класса, он выдаст ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...