A PHP Error was encountered

Severity: Notice

Message: Only variables should be passed by reference

Filename: codeigniter/Common.php

Line Number: 148

A PHP Error was encountered

Severity: 8192

Message: Methods with the same name as their class will not be constructors in a future version of PHP; CI_Hooks has a deprecated constructor

Filename: libraries/Hooks.php

Line Number: 30

A PHP Error was encountered

Severity: 8192

Message: Methods with the same name as their class will not be constructors in a future version of PHP; CI_Config has a deprecated constructor

Filename: libraries/Config.php

Line Number: 29

A PHP Error was encountered

Severity: Notice

Message: Only variables should be passed by reference

Filename: codeigniter/Common.php

Line Number: 148

A PHP Error was encountered

Severity: Notice

Message: Only variables should be passed by reference

Filename: codeigniter/Common.php

Line Number: 148

A PHP Error was encountered

Severity: 8192

Message: Methods with the same name as their class will not be constructors in a future version of PHP; CI_URI has a deprecated constructor

Filename: libraries/URI.php

Line Number: 29

A PHP Error was encountered

Severity: Notice

Message: Only variables should be passed by reference

Filename: codeigniter/Common.php

Line Number: 148

A PHP Error was encountered

Severity: 8192

Message: Methods with the same name as their class will not be constructors in a future version of PHP; CI_Router has a deprecated constructor

Filename: libraries/Router.php

Line Number: 29

A PHP Error was encountered

Severity: Notice

Message: Only variables should be passed by reference

Filename: codeigniter/Common.php

Line Number: 148

A PHP Error was encountered

Severity: 8192

Message: Methods with the same name as their class will not be constructors in a future version of PHP; CI_Output has a deprecated constructor

Filename: libraries/Output.php

Line Number: 29

A PHP Error was encountered

Severity: Notice

Message: Only variables should be passed by reference

Filename: codeigniter/Common.php

Line Number: 148

A PHP Error was encountered

Severity: 8192

Message: Methods with the same name as their class will not be constructors in a future version of PHP; CI_Input has a deprecated constructor

Filename: libraries/Input.php

Line Number: 29

A PHP Error was encountered

Severity: Notice

Message: Only variables should be passed by reference

Filename: codeigniter/Common.php

Line Number: 148

A PHP Error was encountered

Severity: 8192

Message: Methods with the same name as their class will not be constructors in a future version of PHP; CI_Language has a deprecated constructor

Filename: libraries/Language.php

Line Number: 27

A PHP Error was encountered

Severity: Notice

Message: Only variables should be passed by reference

Filename: codeigniter/Common.php

Line Number: 148

A PHP Error was encountered

Severity: 8192

Message: Methods with the same name as their class will not be constructors in a future version of PHP; CI_Base has a deprecated constructor

Filename: codeigniter/Base5.php

Line Number: 33

A PHP Error was encountered

Severity: 8192

Message: Methods with the same name as their class will not be constructors in a future version of PHP; Controller has a deprecated constructor

Filename: libraries/Controller.php

Line Number: 30

A PHP Error was encountered

Severity: 8192

Message: Methods with the same name as their class will not be constructors in a future version of PHP; Lessons has a deprecated constructor

Filename: controllers/lessons.php

Line Number: 8

A PHP Error was encountered

Severity: 8192

Message: Methods with the same name as their class will not be constructors in a future version of PHP; CI_Loader has a deprecated constructor

Filename: libraries/Loader.php

Line Number: 29

A PHP Error was encountered

Severity: Notice

Message: Only variables should be passed by reference

Filename: codeigniter/Common.php

Line Number: 148

A PHP Error was encountered

Severity: 8192

Message: Methods with the same name as their class will not be constructors in a future version of PHP; CI_DB_driver has a deprecated constructor

Filename: database/DB_driver.php

Line Number: 31

A PHP Error was encountered

Severity: Notice

Message: Only variables should be passed by reference

Filename: database/DB.php

Line Number: 133

A PHP Error was encountered

Severity: 8192

Message: Methods with the same name as their class will not be constructors in a future version of PHP; CI_Session has a deprecated constructor

Filename: libraries/Session.php

Line Number: 27

A PHP Error was encountered

Severity: Warning

Message: Cannot modify header information - headers already sent by (output started at /var/www/admin/data/www/masterinweb.net/system/libraries/Exceptions.php:166)

Filename: libraries/Session.php

Line Number: 661

A PHP Error was encountered

Severity: 8192

Message: Methods with the same name as their class will not be constructors in a future version of PHP; Model has a deprecated constructor

Filename: libraries/Model.php

Line Number: 27

A PHP Error was encountered

Severity: 8192

Message: Methods with the same name as their class will not be constructors in a future version of PHP; CI_Pagination has a deprecated constructor

Filename: libraries/Pagination.php

Line Number: 27

Видимость переменных в PHP | MasterInWeb.Net

Видимость переменных в PHP

В данном уроке рассматривается область видимости переменных PHP. Объясняется различие локальной и глобальной области видимости, показывается как получить доступ к глобальным переменным внутри функции, как работать с суперглобалами и создавать статические переменные.

Когда приступаешь к изучению PHP и начинаешь работать с функциями и объектами, область видимости переменных вызывает некоторое смущение. К счастью правила PHP в этом отношении очень просты для понимания (в сравнении с другими языками программирования).

ЧТО ТАКОЕ ОБЛАСТЬ ВИДИМОСТИ?

Область видимости переменных - это контекст, в рамках которого переменная была определена и где к ней можно получить доступ. В PHP имеется две области видимости переменных:

  • Глобальная - к переменным можно получить доступ в любом месте скрипта
  • Локальная - к переменным можно получить доступ только внутри функции, в которой они были определены

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

Переменные с глобальной областью видимости называются глобальными, а с локальной областью видимости - локальными.

Вот пример того, как работают глобальные и локальные переменные.

<?php
 
$globalName = "Ира";

function sayHello() {
	$localName = "Гарри";
	echo "Привет, $localName!
"; } sayHello(); echo "Значение \$globalName: '$globalName'
"; echo "Значение \$localName : '$localName'
"; ?>

После выполнения скрипт выдает:

Привет, Гарри!
Значение $globalName: 'Ира'
Значение $localName : ''

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

  • $globalName - это глобальная переменная
  • $localName - это локальная переменная, которая создана внутри функции sayHello().

После создания переменной и функции скрипт вызывает sayHello(),который выводит 'Привет, Гарри!'. Затем скрипт пытается вывести значения двух переменных с помощью функции echo. Вот что происходит:

  • Так как $globalName была создана вне функции, она доступна в любом месте скрипта, поэтому выводится 'Ира'.
  • $localName будет доступна только внутри функции sayHello(). Так как выражение echo находится вне функции, PHP не дает доступа к локальной переменной . Вместо этого, PHP предполагает, что код будет создавать новую переменную с именем $localName, которая получит значение по умолчанию - пустую строку. вот почему второй вызов echo выводит значение '' для переменной $localName.

ДОСТУП К ГЛОБАЛЬНЫМ ПЕРЕМЕННЫМ ВНУТРИ ФУНКЦИИ

Для получения доступа к глобальной переменной вне функции достаточно просто написать ее имя. Но для получения доступа к глобальной переменной внутри функции, нужно сначала объявить переменную как глобальную в функции с помощью ключевого слова global:

function myFunction() {
	global $globalVariable;
	// Доступ к глобальной переменной $globalVariable
}

Если не сделать этого, то PHP предполагает, что вы создаете или используете локальную переменную.

Вот пример скрипта, который использует глобальную переменную внутри функции:

<?php

$globalName = "Ира";

function sayHello() {
	$localName = "Гарри";
	echo "Привет, $localName!
"; global $globalName; echo "Привет, $globalName!
"; } sayHello(); ?>

После выполнения скрипта выведет:

Привет, Гарри!
Привет, Ира!

Функция sayHello() использует ключевое слово global для объявления переменной $globalName как глобальной. После чего она может получить доступ к переменной и вывести ее значение ('Ира').

ЧТО ТАКОЕ СУПЕРГЛОБАЛЫ?

PHP имеет специальный набор предопределенных глобальных массивов, которые содержат различную информацию. Такие массивы называются суперглобалами, так как они доступны из любого места скрипта, включая внутреннее пространство функций, и их не надо определять с использованием ключевого слова global.

Вот список суперглобалов, доступных в PHP версии 5.3:

  • $GLOBALS - список всех глобальных переменных в скрипте (исключая суперглобалов)
  • $_GET - содержит список всех полей формы, отправленной браузером с помощью запроса GET
  • $_POST - содержит список всех полей формы отправленной браузером с помощью запроса POST
  • $_COOKIE - содержит список всех куки, отправленных браузером
  • $_REQUEST - содержит все сочетания ключ/значение, которые содержатся в массивах $_GET, $_POST, $_COOKIE
  • $_FILES - содержит список всех файлов, загруженных браузером
  • $_SESSION - позволяет хранить и использовать переменные сессии для текущего браузера
  • $_SERVER - содержит информацию о сервере, такую как, имя файла выполняемого скрипта и IP адрес браузера.
  • $_ENV - содержит список переменных среды, передаваемых PHP, например, CGI переменные.

Например, можно использовать $_GET для того, чтобы получить значения переменных заключенных в строке URL запроса скрипта, и вывести их на странице:

<?php

$yourName = $_GET['yourName'];
echo "Привет, $yourName!";

?>

Если вы запустите выше приведенный скрипт с помощью строки URL http://www.example.com/script.php?yourName=Фред, то он выведет:

Привет, Фред!

ПРЕДУПРЕЖДЕНИЕ! В реальном скрипте никогда нельзя использовать подобную передачу данных по причине слабой безопасности. Нужно всегда осуществлять проверку или фильтрацию данных.

Суперглобал $GLOBALS очень удобно использовать, так как он дает возможность организовать доступ к глобальным переменным в функции без необходимости использования ключевого слова global. Например:

<?php

$globalName = "Ира";

function sayHello() {
	echo "Привет, " . $GLOBALS['globalName'] . "!
"; } sayHello(); // Выводит "Привет, Ира!" ?>

СТАТИЧЕСКИЕ ПЕРЕМЕННЫЕ: ОНИ НАХОДЯТСЯ ГДЕ-ТО РЯДОМ

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

В большинстве случаев это отлично работает. Таким образом функции самодостаточны и работают всегда одинаково при каждом вызове.

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

Для создания статической переменной в функции нужно использовать ключевое слово static перед именем переменной и обязательно задать ей начальное значение. Например:

function myFunction() {
	static $myVariable = 0;
}

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

<?php

function createWidget() {
	$numWidgets = 0;
	return ++$numWidgets;
}

echo "Создаем некие виджеты...
"; echo createWidget() . " мы уже создали.
"; echo createWidget() . " мы уже создали.
"; echo createWidget() . " мы уже создали.>
"; ?>

Но, так как переменная $numWidgets создается каждый раз при вызове функции, то мы получим следующий результат:

Создаем некие виджеты...
1 мы уже создали.
1 мы уже создали.
1 мы уже создали.

Но с использованием статической переменной, мы сможем сохранять значение от одного вызова функции к другому:

<?php

function createWidget() {
	static $numWidgets = 0;
	return ++$numWidgets;
}

echo "Создаем некие виджеты...
"; echo createWidget() . " мы уже создали.
"; echo createWidget() . " мы уже создали.
"; echo createWidget() . " >мы уже создали.
"; ?>

Теперь скрипт выдаст ожидаемый результат:

Создаем некие виджеты...
1 мы уже создали.
2 мы уже создали.
3 мы уже создали.

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

Вот и все!

Просмотров: 16534      Дата: 08.03.2011 20:33:15
Понравился урок? Добавьте его к себе в закладки.

Последние уроки категории:

Сокращение PHP кода

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

Видимость переменных в PHP

В данном уроке рассматривается область видимости переменных PHP. Объясняется различие локальной и глобальной области видимости, показывается как получить доступ к глобальным переменным внутри функции, как работать с суперглобалами и создавать статические переменные.

Как читать Rss ленты?

Читалки и агрегаторы RSS используются для доступа, чтения и управления периодически-обновляемыми лентами RSS (или Atom), которые генерируются веб-сайтами. Эти ленты предоставляют доступ к последним материалам с этих сайтов.

Установка и настройка PHP+Apache

В этом уроке хотелось бы поднять очень интересную тему – Установка и настройка веб сервера PHP5 + Apache. В интернете довольно много различных инструкций по данной теме, но только вот в основном это копипаст, а не инструкция для человека, я же постараюсь объяснить все намного проще – на пальцах. Причина для установки локального вебсервера довольно много, например скорость выполнения и отладки скриптов, простота загрузки и модернизации контента и еще много чего.

Как выбрать фреймворк

Так уж повелось, что лень – это двигатель прогресса и как бы странно это не звучало, все те блага цивилизации, которые мы имеем сейчас были сделаны в первую очередь для нашего комфорта. Так и программисты чтобы облегчить себе жизнь и тем самым получить возможность создавать более сложные проекты за менее долгое время придумали сделать себе фреймворки.

Комментарии:

  • Spass 23.04.2012 21:43:37
    Спасибо за статью, очень доступно изложено.
    Ответить
  • dimka2 09.10.2013 20:08:59
    Дизайн под мятую бумагу, писанную авторучкой просто супер! особенно значок - домой! :)))
    Ответить
  • Осталось: 1000 символов.
    Сохранить комментарий Отправка комментария
lessons
downloads
search
hosting

Ищите хороший и не дорогой хостинг?

Хостинг avahost.ua
VPS VDS - виртуальный выделенный сервер
sistems
Обменник.ws