Новые книги

В этой книге авторы специально для вас, уважаемые читатели, изложили собственный опыт и опыт нескольких сотен своих учеников, с которыми они уже создали больше 500 интернет-магазинов в России.

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

Количество открывающихся интернет-магазинов постоянно растет, в то время как на рынке отсутствует комплексное, разработанное практиками бизнеса и профессионалами пособие, доступное широкой аудитории.

Данная книга — это своеобразный бумажный вирус, который овладевает умами. Процесс запуска успешного интернет-магазина изложен настолько подробно, что после прочтения книги невозможно просто жить с этим знанием. С ним придется что-то делать.

12+ (В соответствии с Федеральным законом от 29 декабря 2010 г. № 436-ФЗ.)
Если вы интересуетесь гибкими методологиями по управлению проектами и разработке продуктов, значит, это практическое руководство идеально вам подходит. Борис Вольфсон уже много лет работает в этой сфере, а в данной книге делится своим опытом, который может изменить вашу работу, подход к работе в вашей IT-команде, а со временем и во всей вашей компании.

От других подобных книг эта отличается двумя факторами: сочетанием теории и практики и описанием самых различных аспектов создания продуктов – от управления до разработки и аналитики. В рамках теоретической части по управлению проектами и продуктом описывается современное состояние методологии Scrum и основы Kanban. Практическая часть посвящена бизнес-моделированию, управлению требованиями, аналитикой требований, управлению командами, оценкой сроков, управлению рисками, инженерным практикам разработки (по большей части из экстремального программирования), контролю и обеспечению качества, внедрению и масштабированию Scrum.

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

Область Видимости Переменной

Учебник РНР
НазадГлава 7. Переменные Вперёд

Область видимости переменной

Область видимости переменной это контекст, в котором она определяется. Как правило все переменные PHP имеют единую область видимости. Эта единая область видимости включает также include и required/необходимые файлы. Например:

$a = 1;
include "b.inc";

Здесь переменная $a будет доступна внутри включаемого/include скрипта b.inc. Однако внутри пользовательских функций вводится также локальная область видимости функции. Любая переменная, используемая внутри функции, по умолчанию имеет ограниченную локальную область видимости в пределах функции. Например:

$a = 1; /* глобальная область видимости */ 

function Test()
{ 
    echo $a; /* ссылка на переменную локальной области видимости */ 
} 

Test();

Этот скрипт не производит никакого вывода, так как оператор echo ссылается на локальную версию переменной $a, а ей не присвоено значение в пределах этой области видимости. Вы можете заметить, что это слегка отличается от языка C тем, что глобальные переменные C автоматически доступны функциям, если только не переопределяются специально локальным определением. Это иногда создаёт проблемы, если неумышленно изменить глобальную переменную. В PHP глобальные переменные обязаны быть определены внутри функции, если они будут использоваться в этой функции. Пример:

$a = 1;
$b = 2;

function Sum()
{
    global $a, $b;

    $b = $a + $b;
} 

Sum();
echo $b;

Этот скрипт выведет "3". При определении $a и $b как global внутри функции, все ссылки на любую переменную будут ссылаться на глобальную версию. Нет ограничений на количество глобальных переменных, которые могут обрабатываться в функции.

Второй способ доступа к глобальным переменным глобальной области видимости - использовать специальный определяемый PHP массив $GLOBALS. Предыдущий пример можно записать так:

$a = 1;
$b = 2;

function Sum()
{
    $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
} 

Sum();
echo $b;

Массив $GLOBALS является ассоциативным массивом с именем глобальной переменной как ключом/key и содержимым этой переменной как значением/value элемента этого массива.

Другой важной особенностью области видимости переменной является static/статическая переменная. Статическая переменная существует только в локальной области видимости функции, но не теряет своего значения, когда программа выходит из этой области видимости. Рассмотрим пример:

function Test ()
{
    $a = 0;
    echo $a;
    $a++;
}

Эта функция практически бесполезна, поскольку каждый раз при её вызове $a устанавливается в 0 и печатается "0". Операция $a++, которая выполняет инкремент переменной, реально не нужна, так как при выходе из функции переменная $a исчезает. Чтобы функция не теряла текущего значения счётчика, переменная $a объявляется как static:

function Test()
{
    static $a = 0;
    echo $a;
    $a++;
}

Теперь при каждом вызове функции Test() она будет печатать значение $a и выполнять инкремент.

Static-переменные позволяют также работать с рекурсивными функциями. Рекурсивной является функция, которая вызывает сама себя. При написании таких функций нужно быть внимательным, поскольку есть вероятность сделать рекурсию бесконечной. Вы обязаны убедиться, что имеется адекватный способ прерывания рекурсии. Следующая функция рекурсивно вычисляется до 10 с использованием статической переменной $count:

function Test()
{
    static $count = 0;

    $count++;
    echo $count;
    if ($count < 10) {
        Test ();
    }
    $count--;
}

Zend-Машина 1, выполняющая работу PHP4, реализует модификаторы static и global для переменных в терминах ссылок. Например, правильная глобальная переменная, импортированная внутрь области видимости функции оператором global, создаёт в действительности ссылку на эту глобальную переменную. Это может привести к неожиданным результатам, как показано в примере:

function test_global_ref() {
    global $obj;
    $obj = &new stdclass;
}

function test_global_noref() {
    global $obj;
    $obj = new stdclass;
}

test_global_ref();
var_dump($obj);
test_global_noref();
var_dump($obj);

Выполнение этого примера даст на выходе:

NULL
object(stdClass)(0) {
}

Аналогично для оператора static. Ссылки не хранятся статично:

function &get_instance_ref() {
    static $obj;

    echo "Static object: ";
    var_dump($obj);
    if (!isset($obj)) {
        // присвоить ссылку static-переменной
        $obj = &new stdclass;
    }
    $obj->property++;
    return $obj;
}

function &get_instance_noref() {
    static $obj;

    echo "Static object: ";
    var_dump($obj);
    if (!isset($obj)) {
        // присвоить объект static-переменной
        $obj = new stdclass;
    }
    $obj->property++;
    return $obj;
}

$obj1 = get_instance_ref();
$still_obj1 = get_instance_ref();
echo "\n";
$obj2 = get_instance_noref();
$still_obj2 = get_instance_noref();

Выполнение этого примера даст на выходе:

Static object: NULL
Static object: NULL

Static object: NULL
Static object: object(stdClass)(1) {
  ["property"]=>
  int(1)
}

Этот пример показывает, что при присвоении ссылки static-переменной, ссылка не запоминается, когда вы во второй раз вызываете функцию &get_instance_ref().


Назад Оглавление Вперёд
Предопределённые переменные Вверх Переменные переменные