Новые книги

В книге прослеживается история и эволюция компьютерного мира, которую можно условно разделить на несколько периодов: период, предшествующий компьютерной эпохе; период создания первых компьютеров и появления первых языков программирования; период становления и развития компьютерной индустрии, возникновения компьютерных систем и сетей; период создания объектно-ориентированных языков программирования и новых компьютерных технологий. Каждая из глав книги посвящена отдельному периоду, изобретателям, конструкторам и программистам — архитекторам компьютерного мира.

Для широкого круга читателей
Инновации являются важнейшим фактором роста. Сегодня, более чем когда-либо, компании должны внедрять инновации, чтобы выжить. Но успешные инновации – это очень непростая задача. Авторы – партнеры всемирно известной консалтинговой компании Simon-Kucher & Partners Strategy & Marketing Consultants знают о чем говорят. Георг Таке – ее генеральный директор, а Мадхаван Рамануджам – партнер в Сан-Франциско.

Simon-Kucher & Partners – глобальная консалтинговая компания, насчитывающая 900 профессионалов в 33 офисах по всему миру. Ее специализация – стратегии, маркетинг, ценообразование и продажи. Основанная в 1985 году, компания обладает 30-летним опытом и считается ведущим консультантом по ценообразованию в мире.

Если вы генеральный директор, или относитесь к исполнительному руководству, или являетесь частью команды, ответственной за инновации и разработку новых продуктов, эта книга для вас. С помощью специальных методик вы сможете сделать монетизацию инноваций частью ДНК вашей компании. Примеры показывают, как одни из лучших инновационных компаний мира, таких, как LinkedIn, UBER, Porsche, Optimizely, Dr?ger, Swarovski и крупные фармацевтические компании, используют принципы, описанные в этой книге.

«Монетизация инноваций» представляет практический подход, который может быть адаптирован для любой организации, в любой отрасли.

Конструкторы

Учебник РНР
Назад Глава 13. Классы и Объекты Вперёд

Конструкторы

Внимание!

В PHP 3 и PHP 4 конструкторы ведут себя по-разному. Предпочтительна исключительно семантика PHP 4.

Конструкторы это функции класса, которые автоматически вызываются при создании нового экземпляра класса операцией new. В PHP 3 функция становится конструктором, когда она имеет то же имя, что и класс. В PHP 4 функция становится конструктором, когда она имеет то же имя, что и класс, в котором она определена - разница незаметна, но существенна (см. далее).

// Работа с PHP 3 и PHP 4.
class Auto_Cart extends Cart
{
    function Auto_Cart()
    {
        $this->add_item ("10", 1);
    }
}

Здесь определяется класс Auto_Cart, который является Cart плюс конструктор, который инициализирующий cart одним элементом номер "10" всякий раз, когда новый Auto_Cart создаётся с помощью "new". Конструкторы могут принимать аргументы, и эти аргументы не обязательны, что делает эти конструкторы более используемыми. Чтобы иметь возможность использовать класс без параметров, все параметры конструкторов нужно сделать необязательными/optional, предоставив значения по умолчанию.

// Работа в PHP 3 и в PHP 4.
class Constructor_Cart extends Cart
{
    function Constructor_Cart($item = "10", $num = 1)
    {
        $this->add_item ($item, $num);
    }
}
 
// Использовать ту же заглушку.

$default_cart = new Constructor_Cart;
 
// Создать новый ...
 
$different_cart = new Constructor_Cart("20", 17);

Вы можете также использовать операцию @ для подавления ошибок, возникающих в конструкторе, например, @new.

Внимание!

В PHP 3 получаемые классы и конструкторы имеют некоторые ограничения. Следующие примеры нужно внимательно разобрать, чтобы понять эти ограничения.


class A
{
    function A()
    {
      echo "I am the constructor of A.<br>\n";
    }
}

class B extends A
{
    function C()
    {
        echo "I am a regular <br>\n";
    }
}

// в PHP 3 конструктор не вызывается.
$b = new B;

В PHP 3 никакой конструктор в вышеприведённом примере не вызывается. Правило PHP 3 таково: 'Конструктор это функция с тем же именем, что и класс'. Имя класса - B, а функции с именем B() в классе B нет. Ничего не происходит.

Это исправлено в PHP 4 путём введения нового правила: если класс не имеет конструктора, вызывается конструктор базового класса, если он имеется. В РНР 4 предыдущий пример выведет 'I am the constructor of A.<br>'.

class A
{
    function A()
    {
        echo "I am the constructor of A.<br>\n";
    }

    function B()
    {
        echo "I am a regular function named B in class A.<br>\n";
        echo "I am not a constructor in A.<br>\n";
    }
}

class B extends A
{
    function C()
    {
        echo "I am a regular <br>\n";
    }
}

// Это вызов B() как конструктора.
$b = new B;

В PHP 3 функция B() в классе A станет конструктором в классе B, хотя это никак не предполагается. Правило PHP 3: 'Конструктор это функция с тем же именем, что и класс'. PHP 3 не заботиться о том, определяется ли функция в классе B или наследуется.

Это изменено в PHP 4 путём модификации правила: 'Конструктор это функция с тем же именем, что и класс, в котором она определяется'. Таким образом, в PHP 4 класс B может не иметь собственной функции-конструктора, и будет вызван конструктор базового класса, печатая 'I am the constructor of A.<br>'.

Внимание!

Ни PHP 3, ни PHP 4 не вызывают конструктор базового класса автоматически из конструктора получаемого класса. Вы сами должны поместить вызовы конструкторов в нужных местах.

Примечание: в PHP 3 и PHP 4 нет деструкторов. Вы можете использовать register_shutdown_function() для симуляции большей части работы деструкторов.

Деструкторы это функции, вызываемые автоматически при уничтожении объекта в процессе работы функции unset() или просто при выходе за пределы области видимости. В PHP нет деструкторов.


Назад Оглавление Вперёд
extendsВверх ::