О __конструкторах и прохождении: для чего они? О родителях: берут ли они предметы братьев и сестер и наоборот? - PullRequest
0 голосов
/ 17 июня 2011

Хорошо, поэтому в книге сказано: «при создании нового объекта вы можете передать список аргументов вызываемому классу. Они передаются в специальный метод внутри класса, называемый конструктором, который инициализирует различные свойства.

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


class User
{
  function __constructor($param1, $param2)
  {
    echo "User construct."
  }
}
user();

Что должно произойти? Я не могу сказать, потому что мои пастбины говорят, что это «возможная атака CRF», что бы это ни значило ...

Двигаясь прямо, мы приходимк следующему разделу книги, где код говорит:


$bothCatsObject = new tiger();
echo "Tigers have...<br>";
echo "Fur: " . $bothCatObject->fur . "<br />";
echo "Stripes: " . $bothCatObject->stripes;

class cat
{
  public $fur; // Cats have fur.
  function __construct()
  {
    $this->fur = "TRUE";
  }
}

class tiger extends Cats
{
  public $stripes; // Tigers have stripes.
  function __construct()
  {
    parent::__construct();  // Call parent construct first.
    $this->stripes = "True";
  }
}

Это точка второго блока кода, показывающая, что при вызове объекта его конструкции активируют и устанавливают свойства в активной памяти или что-то в этом родеИли, может быть, это означает, что когда вызывается свойство, если свойство, его значение устанавливается в конструкторе, оно будет иметь значение. Если его значение не установлено в конструкцииctor (например, если он установлен внутри неконструктивного метода), будет возвращена ошибка?

В книге говорится, что «этот код использует преимущества наследования конструктора обычным способом».Итак, я надеюсь, что я не слишком далеко.Мне интересно, почему конструкторы полезны.В каких приложениях нужны конструкторы, если мне нужно знать, что на данном этапе моего исследования?

Наконец, в этом случае классу "cats" никогда не назначается объект.Поскольку «тигр» расширяет класс кошек, можно ли вызывать класс кошек через объект тигра?Вот пример того, что я имею в виду:


$bothCatsObject = new tiger();
$bothCatsObject->catTest();  //Does this return an error?

class cat
{
  public $fur; // Cats have fur.
  function __construct()
  {
    $this->fur = "TRUE";
  }
  function catTest()
  {
    echo "The object works for cats and tigers."
  }
}

class tiger extends Cats
{
  public $stripes; // Tigers have stripes.
  function __construct()
  {
    parent::__construct();  // Call parent construct first.
    $this->stripes = "True";
  }
  function tigerTest()
  {
    echo "The object works for tigers and cats."
  }
}

В этих же строках могу ли я вызвать функции, встроенные в класс "тигра", из нового объекта cat, потому что класс тигра находится в одном роде с классом cat?Другими словами, сработает ли замена строк 1 и 2 предыдущего блока кода на этот код или будет выдано сообщение об ошибке:

<pre> $bothCatsObject = new cat(); $bothCatsObject->tigerTest(); //Does this return an error?

1 Ответ

1 голос
/ 17 июня 2011

Прежде всего, запустите ваш скрипт на локальном компьютере.

ok:

class User
{
  function __constructor($param1, $param2)
  {
    echo "My Name is {$param1} {$param2} ;)";
  }
}

при инициализации пользовательского класса он автоматически запустит функцию __construct:

$user = new User("John","Smith");
// this will output "My Name is John Smith ;)"

Конструкторы запускаются каждый раз, когда вы создаете новый экземпляр класса.Например: Допустим, вы хотите установить соединение с базой данных и выполнить тяжелую работу. Вы можете написать конструктор, который проверяет, существует ли уже соединение с БД, и, если он не создан, обрабатывает все настройки по умолчанию

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