PHP: $ myObject = new ClassName (); vs newClassName; - PullRequest
1 голос
/ 13 июня 2011

Итак, я понимаю, что иногда люди используют парены, а иногда - нет, когда объявляют экземпляр класса как объект.

Если я объявляю класс без аргументов, а затем расширяю его, чтобы он имел аргументы, нужно ли исходному классу иметь парены?

Кроме того, могу ли я иметь класс с квадратными скобками и без конкретного параметраили ссылка на объявление переменной, например:

$ myObject = clone ClassName ();

А затем используйте параметры для класса ....

Класс User ($ param,$ param2)

Или классы вообще когда-либо используют параметры?Я не совсем уверен, потому что в моей книге нет примера класса, который принимает параметры ...

Ответы [ 2 ]

7 голосов
/ 13 июня 2011

Во-первых, я предполагаю, что вы имеете в виду new вместо clone. PHP не требует использования скобок при создании класса.

class Foo { }

$foo = new Foo;
$foo = new Foo();

Оба действительны.

Все передаваемые вами аргументы передаются в функцию __construct. Эта функция (если она существует) автоматически вызывается при создании объекта.

class Foo
{
  public function __construct($n)
  {
     echo "Hello, $n\n";
  }
}

$foo = new Foo("World!");

Будет выведено:

Hello, World!

Если конструктор принимает аргументы, это ошибка (предупреждение), если вы ничего не отправляете.

Обратите внимание, что __construct не нужно иметь параметры. Допустимо иметь конструктор, который просто делает что-то без каких-либо параметров.

2 голосов
/ 13 июня 2011

Эти параметры, например,

$myObject = new ClassAwesome($param1, $param2);

не соответствуют объявлению класса, они относятся к конструктору.Пример:

//this is how you declare a class, there will not be a parenthesis here
class ClassAwesome {

    //here is where the parameters are used when you instantiate a class
    public function __construct($param1, $param2) {
        //init code goes here
    }
}

Таким образом, в основном причина, по которой вы не видите объявление класса с параметрами, заключается в том, что они не существуют, а конструктор класса - это место, куда идут параметры.

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