2015-01-02 2 views
2

Я очень новичок в php-классах, и мне было интересно, почему мне нужно объявить его переменной и установить ее как NEW?PHP-классы :: Почему объявить как новое?

Вот пример:

class myFirstClass { 
    function Version(){ 
     return 'Version 1'; 
    } 
    function Info(){ 
     return 'This class is doing nothing'; 
    } 
} 

$hola = new myFirstClass; 

echo $hola->Version(); 

Почему это не будет работать без объявить его в переменную и установить его на NEW?

Другими словами ... Без этой строки:

$hola = new myFirstClass; 

Я так привык к функциям, так это выглядит странно для меня ...

+0

необходимо создать экземпляр. поэтому используется «новый». –

+0

Потому что так работает ООП. Вам нужно создать «новый» экземпляр объекта 'myFirstClass'. –

+0

Вы должны прочитать больше в ООП, вот как это работает! Вы можете представить класс как план, и с новым вы создаете точную копию из этого плана, создайте объект! Тогда планируйте, что вы не можете использовать, но если вы сделали свой объект, вы можете это использовать! – Rizier123

ответ

2

Вы правы! Нет необходимости использовать оператора new:

class myFirstClass { 
    static function Version(){// static keyword 
     return 'Version 1'; 
    } 
    function Info(){ 
     return 'This class is doing nothing'; 
    } 
} 

echo myFirstClass::Version();// direct call 
+0

... если вы обращаетесь к статическому методу. Все зависит от того, что вы пытаетесь сделать. –

2

Чтобы создать экземпляр класса, необходимо использовать новое ключевое слово. Объект всегда будет создан, если только объект не имеет определенного конструктора, который генерирует исключение при ошибке. Классы должны быть определены до создания экземпляра (а в некоторых случаях это требование).

Если строка с именем класса используется с новым, будет создан новый экземпляр этого класса. Если класс находится в пространстве имен, при его использовании должно использоваться его полное имя.

Основы

http://php.net/manual/en/language.oop5.basic.php

Классы и объекты

http://php.net/manual/en/language.oop5.php

1

Эта линия:

$hola = new myFirstClass;

говорит: создать новый объект под названием $hola, а затем поставить новый экземпляр myFirstClass в $hola. Теперь $hola - это буквально объект, содержащий новый экземпляр myFirstClass.

+0

Я получил его, но все еще ... Я не понимаю, зачем мне передавать его переменной и не могу использовать его как функцию, например, например: echo myFirstClass-> Version(); –

+0

Это способ ссылки на объект, вот и все! Вы бы назвали $ hola.someMethod(); использовать метод из него. – Petro

4

Это основной принцип объектно-ориентированного программирования (ООП). Давайте используем библиотечную систему, например. Если вы хотите получить имя книги, вы не можете просто сказать «дайте мне имя книги», вы должны знать, какую книгу (по id, author, whatever).

В функции, вы можете написать тот, который выглядит следующим образом:

function get_book($id){ // code } 

В ООП это на самом деле не работает таким образом. У вас есть классная книга, в которой хранится имя. Но это имя предназначено только для данной книги.

class Book { 
    var $name; 
    public __construct($name) { 
    $this->name = $name; 
    } 

    public function getName() { 
    return $this->name; 
    } 
} 

Для того, чтобы вызвать функцию getName() мы должны иметь книгу. Это то, что делает новое.

$book = new Book("my title"); 

Теперь, если мы используем функцию getName() на $book мы получим название.

$book->getName(); // returns "my title" 

Надеюсь, что это поможет.

Смежные вопросы