разница между :: и ->

  • Автор темы Автор темы EugeneS
  • Дата начала Дата начала

EugeneS

Новичок
разница между :: и ->

собственно сабж ...
перехожу с 4 на 5 и вот чётко понять не могу в каких случаях использовать :: а не -> почему именно :: и в чём между ними разница ...

на мануал не отсылайте ток ... уже не раз прочёл прежде чем задать вопрос ... там факты а не объяснение ....
 
:: для статических свойств и методов
-> для динамических свойств и методов
 
спасиб, но тогда второй вопрос .... смысл декларировать их статиком ... просто что бы обращаться без объявления класса ?
и если так то в чём приемущество ? что экономится ? или быстрее работает ?
 
Да, просто что бы обращаться без объявления класса.
Вопрос "в чём приемущество" неверный, так как данная возможность обеспечивает гибкость. То есть существуют ситуации, в которых преимущество даёт использование статического метода или свойства; в других динамического. Советую почитать книжки по ООП.
В общем случае статические свойства нужны для сохранения какого-то значения, одинакового для всех объектов класса.
Применение статических методов, например, позволяет присвоить значение статическому свойству до объявления класса. Или ещё пример: как создать экземпляр класса, у которого private конструктор?
 
В языках Java и Javascript есть, например, абстрактный класс Math, в котором есть статические компоненты типа Math.sin() и Math.PI.

Т. е. математика у нас хранится отдельно от всего остального. Остальное тоже отдельно хранится...
 
Автор оригинала: svetasmirnova
Или ещё пример: как создать экземпляр класса, у которого private конструктор?
поясни пожста, зачем (и/или где) это ( private конструктор) применяется..ещё лучше приведи маленький пример..заранее благодарен
 
Автор оригинала: specialist
поясни пожста, зачем (и/или где) это ( private конструктор) применяется..ещё лучше приведи маленький пример..заранее благодарен
PHP:
class Foo
{
    private function __construct()
    {
    }


    public static function singleton()
    {
        static $instance;

        if (empty($instance)) {
            $instance = new Foo();
        }
        return $instance;
    }
}

$foo = Foo::singleton();

edit: фигурную скобку проэтосамое
 
Помоему private construct не поможет, ведь обьект создастся вне зависимости от результата __construct или существования. Вот если бы можно было бы уничтожать обьект или прерывать процесс создания обьекта из метода обьекта, к примеру unset($this), то это было бы намного проще.
 
прерывать процесс создания обьекта из метода обьекта
Это как (в смысле создание объекта из метода)? Объект "создается" конструктором. (Он конечно может вызывать другие методы и ф-ции, но это сути не меняет). А создание и так легко и непренужденно прерывается:
PHP:
throw new Exception();
 
Я имел ввиду прервать процесс создания обьекта в методе, то бишь тот же самый exception.
 
Автор оригинала: demongloom
Помоему private construct не поможет, ...
А давай-ка ты, дружок, перестанешь надувать щёки и запустишь мой пример, дополнив его строчкой
PHP:
$foo2 = new Foo();
и доложишь в эту тему о результатах.

Если не доложишь, будем считать что слил.
 
Автор оригинала: Sad Spirit
А давай-ка ты, дружок, перестанешь надувать щёки и запустишь мой пример, дополнив его строчкой
PHP:
$foo2 = new Foo();
и доложишь в эту тему о результатах.

Если не доложишь, будем считать что слил.
Результат хороший, но только фатальный еррор не есть хорошо. Уж лучше warning через throw exception делать.
 
Sad Spirit
спасибо за пример...и ещё тогда уж поясни область применения...другими словами, когда такое может понадобиться?
 
Сверху