2013-03-29 2 views
0

Я новичок в стиле ООП PHP5, я заметил __construct и __deconstruct в классах классов и производственных классах.__Конструкция в классах ООП?

Я перечитал руководство этого:

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

и посмотрел на ряд вопросов/ответов на StackOverflow. Мне все еще трудно понять, каков фактический смысл его exisitance?

class foo { 
    function __construct() 
    { 
    // do something 
    } 

    public function Example() 
    { 
    echo "Example Functions"; 
    } 

    function __destruct() 
    { 
    // do something 
    } 
} 

Тот же класс может функционировать так же с не хитами, как:

class foo { 
     public function Example() 
     { 
     echo "Example Functions"; 
     } 
    } 

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

Почему это приоритет в классах PHP5 OOP?

+0

Насколько хорошо вы знаете ООП? PHP не является идеальным языком для изучения/практики программирования в стиле ООП, поскольку он позволяет всевозможные странные вещи. Например, вы можете вызвать 'foo :: Example();' через статический контекст, хотя «правильный» способ вызова - $ myFoo = new foo(); $ MyFoo-> Пример(); '. Вызов этого последнего способа полностью обходит ваши конструкторы/деструкторы, так как вы вызываете без создания экземпляра. – Matthematics

+0

@ Lübnah Если PHP не является идеальным методом для практики стиля ООП, то что вы предлагаете? – user2146021

+0

Насколько мне не нравится Java, это отличный язык для изучения основ. Но действительно, любой типизированный язык будет делать. Вы хотите изучить веревки со строгим языком, чтобы вы могли хотя бы научиться распознавать «странное вуду», что языки, подобные PHP, позволят вам уйти. – Matthematics

ответ

1
class Foo { 
    public function __construct() { 
     print("This is called when a new object is created"); 
     // Good to use when you need to set initial values, 
     // (possibly) create a connection to a database or such. 
    } 

    public function __destruct() { 
     print("This is called when the class is removed from memory."); 
     // Should be used to clean up after yourself, close connections and such. 
    } 
} 

$foo = new Foo(); 

Сложение,

class Person { 

    private $name; // Instance variable 
    private $status; // Instance variable 

    // This will be called when a new instance of this class i created (constructed) 
    public function __construct($name, $age) { 
     $this->name = ucfirst($name); // Change input to first letter uppercase. 

     // Let the user of our class input something he is familiar with, 
     // then let the constructor take care of that data in order to fit 
     // our specific needs. 
     if ($age < 20) { 
      $this->status = 'Young'; 
     } else { 
      $this->status = 'Old'; 
     } 
    } 

    public function printName() { 
     print($this->name); 
    } 

    public function printStatus() { 
     print($this->status); 
    } 
} 

$Alice = new Person('alice', 27); 
$Alice->printName(); 
$Alice->printStatus(); 

/Сложение

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

+0

Итак, в основном то же самое, что и 'register_shutdown_function'? Когда объект вызывается, будет запущена конструкция; но что это должно содержать? Параметры? переменные? что он на самом деле создает? Я понимаю, что они делают, но в чем смысл его существования? – user2146021

+0

Ошибка @Codeius на вашем принтере в пределах __destruct. Отсутствует полуколон –

+0

@ user2146021 Дополнительный пример класса Person должен немного разъяснять использование конструкторов, деструкторы немного сложнее объяснить простым примером, поскольку они обычно используются для закрытия соединений с такими ресурсами, как базы данных или очистки которая больше не нужна. –

1

__deconstruct

Деструктор вызывается, когда класс собирается быть мусора, что позволяет выполнять операции в последнюю минуту, перед тем как класс расположен.

A _contructor - это просто оппозиция. Он позволяет вам устанавливать свойства для вашего объекта во время его создания.

Это был старый способ создания конструктора, который, согласно документации, остался там для обратной совместимости.

public function Example() 
{ 
    echo "Example Functions"; 
} 

«Для обеспечения обратной совместимости, если PHP-не может найти __construct функции() для данного класса, а класс не может наследоваться от родительского класса, он будет искать функции конструктора старого стиля, по имени класса. Фактически это означает, что единственный случай, который имел бы проблемы с совместимостью, заключается в том, что у класса был метод с именем __construct(), который использовался для различной семантики. "

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

+0

Это объясняет причину разрушения, но почему и конструкция, и разрушение предпочтительнее в классе? Для чего это? Какие именно роли он выполняет? – user2146021

+0

см. Обновленный ответ – Marco

+0

Приведем пример, предположим, что у вас есть объект (Учетная запись) со следующей операцией: Withdraw (amount), в этом примере был бы полезен contructor, поскольку вы хотите установить баланс учетной записи, прежде чем позволять деньги снимать. – Marco

0

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

Деструкторы в PHP обычно используются для ручной очистки объекта. Они не используются так часто из-за пожарной и забытой природы PHP. Они могут использоваться для освобождения ресурсов (db-соединений, файлов) в длинных сценариях.

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