Сделай Сам Свою Работу на 5

Обращение к функциям через переменные





 

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

 

Переменные функции не будут работать с такими языковыми конструкциями как echo(), print(), unset(), isset(), empty(), include(), require() и другими подобными им операторами. Вам необходимо реализовывать свою функцию-обертку (wrapper) для того, чтобы приведенные выше конструкции могли работать с переменными функциями.

 

Пример 4.4.1 (работа с функциями посредством переменных):

 

<?

function foo() {

echo "In foo()<br />\n";

}

 

function bar($arg = '')

{

echo "In bar(); argument was '$arg'.<br />\n";

}

 

// Функция-обертка для echo

function echoit($string)

{

echo $string;

}

 

$func = 'foo';

$func(); // Вызывает функцию foo()

 

$func = 'bar';

$func('test'); // Вызывает функцию bar()

 

$func = 'echoit';

$func('test'); // Вызыывет функцию echoit()

?>

 

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



 

Пример 4.4.2 (обращение к методам класса посредством переменных):

 

<?

class Foo

{

function Variable()

{

$name = 'Bar';

$this->$name(); // Вызываем метод Bar()

}

 

function Bar()

{

echo "This is Bar";

}

}

 

$foo = new Foo();

$funcname = "Variable";

$foo->$funcname(); // Обращаемся к $foo->Variable()

 

?>

 

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

 

Переменные в функциях имеют локальную область видимости. Это значит, что даже если локальная и внешняя переменные имеют одинаковые имена, то изменение локальной переменной не повлияет на внешнюю переменную (пример 4.5.1):

 

<?

function get_sum()

{

$var = 5; // локальная переменная

echo $var;

}

$var = 10; // глобальная переменная

get_sum(); // выводит 5 (локальная переменная)

echo("<br>$var"); // выводит 10 (глобальная переменная)

?>

 

Локальную переменную можно сделать глобальной, если перед её именем указать ключевое слово global. Если внешняя переменная объявлена как global, то к ней возможен доступ из любой функции (пимер 4.5.2):

 

<?

function get_sum()

{

global $var;

$var = 5; // изменяем глобальную переменную

echo $var;

}

$var = 10;



echo("$var<br>"); // выводит 10

get_sum(); // выводит 5 (глобальная переменная изменена)

?>

 

Доступ к глобальным переменным можно получить также через ассоциативный массив $GLOBALS (пример 4.5.3):

 

<?

function get_sum()

{

$GLOBALS["var"] = 20; // изменяем глобальную переменную $var

echo($GLOBALS["var"]);

}

$var = 10;

echo("$var<br>"); // выводит 10

get_sum(); // выводит 20 (глобальная переменная изменена)

?>

 

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

 

Время жизни переменных

 

Временем жизни переменной называется интервал выполнения программы, в течение которого она существует. Поскольку локальные переменные имеют своей областью видимости функцию, то время жизни локальной переменной определяется временем выполнения функции, в которой она объявлена. Это означает, что в разных функциях совершенно независимо друг от друга могут использоваться переменные с одинаковыми именами. Локальная переменная при каждом вызове функции инициализируется заново, поэтому функция-счётчик, в приведенном ниже примере всегда будет возвращать значение 1 (пример 4.6.1):

 

function counter()

{

$counter = 0;

return ++$counter;

}

 

Для того, чтобы локальная переменная сохраняла своё предыдущее значение при новых вызовах функции, её можно объявить статической при помощи ключевого слова static (пример 4.6.2):

 

function counter()

{

static $counter = 0;

return ++$counter;

}

 

Временем жизни статических переменных является время выполнения сценария. Т.е., если пользователь перезагружает страницу, что приводит к новому выполнению сценария, переменная $counter в этом случае инициализируется заново.



 

Строковые функции в PHP

 

В отличие от "классических языков программирования" (C/C++, Delphi и т.д.) PHP обладает колоссальными возможностями по работе со строками. В данной части лекционного курса мы рассмотрим лишь наиболее часто используемые функции, но даже только их уже вполне достаточно для решения подавляющего большинства возникающих задач.

 

Функция htmlspecialchars

 

string htmlspecialchars ( string string [, int quote_style [, string charset]] )

 

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

Эта функция полезна при отображении данных, введенных пользователем, которые могут содержать нежелательные HTML тэги, например в форуме или гостевой книге. Необязательный второй аргумент quote_style определяет режим обработки одиночных и двойных кавычек. В режиме по умолчанию, ENT_COMPAT, преобразуются двойные кавычки, одиночные остаются без изменений. В режиме ENT_QUOTES преобразуются и двойные, и одиночные кавычки, а в режиме ENT_NOQUOTES и двойные, и одиночные кавычки остаются без изменений.

 

Производятся следующие преобразования:

 

'&' (амперсанд) преобразуется в '&amp;'

'"' (двойная кавычка) преобразуется в '&quot;' когда не используется ENT_NOQUOTES

''' (одиночная кавычка) преобразуется в '&#039;' только в режиме ENT_QUOTES

'<' (знак "меньше чем") преобразуется в '&lt;'

'>' (знак "больше чем") преобразуется в '&gt;'

 

Пример 4.7.1.1:

 

<?

$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);

echo $new; // &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;

?>

 

Обратите внимание, что функция не производит других преобразований, кроме описанных выше. Для преобразования всех HTML сущностей используйте htmlentities().

Необязательный третий аргумент charset определяет кодировку, используемую при преобразовании. По умолчанию используется кодировка ISO-8859-1. Поддержка этого аргумента была добавлена в PHP 4.1.0.

Начиная с PHP 4.3.0 поддерживаются следующие кодировки.

 

Таблица 1. Поддерживаемые кодировки

Кодировка Псевдонимы Описание
ISO-8859-1 ISO8859-1 Западноевропейская Latin-1
ISO-8859-15 ISO8859-15 Западноевропейская Latin-9. Добавляет знак евро, французские и финские буквы к кодировке Latin-1(ISO-8859-1).
UTF-8   8-битная Unicode, совместимая с ASCII.
cp866 ibm866, 866 Кириллическая кодировка, применяемая в DOS. Поддерживается в версии 4.3.2.
cp1251 Windows-1251, win-1251, 1251 Кириллическая кодировка, применяемая в Windows. Поддерживается в версии 4.3.2.
cp1252 Windows-1252, 1252 Западноевропейская кодировка, применяемая в Windows.
KOI8-R koi8-ru, koi8r Русская кодировка. Поддерживается в версии 4.3.2.
BIG5 Традиционный китайский, применяется в основном на Тайване.
GB2312 Упрощенный китайский, стандартная национальная кодировка.
BIG5-HKSCS   Расширенная Big5, применяемая в Гонг-Конге.
Shift_JIS SJIS, 932 Японская кодировка.
EUC-JP EUCJP Японская кодировка.

 

Неперечисленные выше кодировки не поддерживаются, и вместо них применяется ISO-8859-1.

 

Функции поиска в тексте

 

substr(), strpos(), strrpos(), strstr(), strchr(), stristr(),

strrchr(), substr_count(), strspn(), strcspn()

 

Substr()

 

string substr(string string, int start[, int length])

 

Возвращает часть строки. Первый аргумент – исходная строка; второй – положение в строке, которую надо вернуть, первого символа (отсчет начинается с нуля); третий – длина строки в символах, которую надо вернуть. Если третий аргумент не указан, то возвращается вся оставшаяся часть строки.

 

Пример 4.7.2.1.1:

 

<?

$string = substr("Hello, world!", 6, 2);

echo ();

?>

 

Результат выполнения – символ "w". Если же третий параметр не указывать, т.е. написать (пример 4.7.2.1.2)

 

$string = substr("Hello, world!", 6);

 

то возвратиться подстрока "world!".

 

Strpos()

 

string strpos(string haystack, string needle[, int offset])

 

Обеспечивает действие, обратное функции substr. Т.е. возвращает позицию в строке haystack, в которой найдена переданная ей подстрока needle. Т.е. следующий скрипт (пример 4.7.2.2.1)

 

<?

$string = strpos("Hello, world!", "world");

echo($string);

?>

 

вернёт число 7.

 

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

 

Strrpos()

 

string strrpos(string haystack, string needle)

 

Ищет в строке haystack последнюю позицию, где встречается символ needle.

 

Strstr()

 

string strstr(string haystack, string needle)

 

Возвращает участок строки, заданной в параметре haystack, начиная с первого фрагмента, указанного в параметре needle, и до конца строки. В случае неудачи функция возвращает false.

 

Пример (4.7.2.4.1):

 

<?

$url = "http://www.domain.ru";

$www = strstr($url,"w");

echo ($www);

?>

 

Результат: www.domain.ru

 

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

 

Stristr()

 

string stristr(string haystack, string needle)

 

Эта функция работает аналогично функции strstr(), но является нечувствительной к регистру.

 

Strrchr()

 

string strrchr(string haystack, string needle)

 

Эта функция отличается от аналогичных ей тем, что осуществляет поиск последнего вхождения подстроки. Т.е. функция strrchr() возвращает участок строки, заданной в параметре haystack, начиная с последнего фрагмента, указанного в параметре needle и до конца строки. В случае неудачи возвращает false.

Чувствительна к регистру. В случае, если needle не является строкой, то значение преобразуется в целое и используется как код искомого символа.

 

Substr_count()

 

int substr_count(string haystack, string needle)

 

Находит количество вхождений фрагмента в строку. Возвращает число фрагментов needle, присутствующих в строке haystack.

 

Пример (4.7.2.7.1):

 

<?

$str = "dfhd@ffs@dfskfk@asas";

$substr_count = substr_count($str,"@");

echo ($substr_count);

?>

 

Результат: 3.

 

 

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.