[PHP] Область действия, функции переменных, анонимные функции, замыкания и общие системные функции

функция

Функция: функция — это грамматическая структура, которая инкапсулирует блок кода (несколько строк кода), реализующий определенную функцию в структуру, тем самым реализуя повторное использование (повторное использование) кода.

Определение и использование

function 函数名(参数){
    
    
	//函数体
	//返回值:return 结果;
}

Цель определения функций: добиться повторного использования кода, по одной функции на функцию (просто и понятно).


Использование функций: 函数名()доступ к функциям через

Уведомление:

  • Если функция имеет параметры в процессе определения, то при вызове необходимо передать соответствующие параметры: функция — это структура, которая не запускается автоматически, для выполнения ее необходимо вызвать
  • Функция вызывается на этапе выполнения кода и при обнаружении имени функции, а не на этапе компиляции.
  • Характеристики вызова функции: пока система может найти соответствующую функцию в памяти, она может быть выполнена ( вызов функции может быть до определения функции )
display(20); //20hello Mango

function display($val)
{
    
    
    echo $val;
    echo "hello Mango";
}

Правила именования

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

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

1. Метод Camel Case : за исключением первого слова слева, первая буква всех последующих слов пишется с заглавной буквы: showParentInfo()

2. Метод подчеркивания : слова соединяются подчеркиванием, и все слова написаны строчными буквами: show_parent_info()

Имя функции: В цикле скрипта не допускаются функции с одинаковым именем (обычно при разработке системы не используется функция с таким же именем)


тип параметра

Параметры функции делятся на два типа: формальные параметры и фактические параметры.

  • Формальные параметры: формальные параметры, параметры, не имеющие практического значения, — это параметры, используемые при определении функции.
  • Фактические параметры: Фактические параметры, параметры с фактическим значением данных — это параметры, используемые при вызове функции.

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

пример:

изображение-20230731171911592

Уведомление:

1. В PHP допускается больше реальных параметров, чем формальных параметров (числа): внутри функции они не используются.

2. Теоретически в PHP нет ограничений на количество формальных параметров (реальная разработка будет не слишком большой)

3. Количество фактических параметров не может быть меньше количества формальных параметров.


По умолчанию

Значение по умолчанию относится к значению по умолчанию формального параметра.Когда функция определена, формальному параметру присваивается первоначальное значение: если параметр (фактический параметр), переданный при фактическом вызове, не предоставлен, формальный параметр будет используйте значение на момент определения. Чтобы ввести функцию для участия в операции.

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

Меры предосторожности:

1. Определение значения по умолчанию размещается в крайнем правом углу (несколько), причем левый параметр не может иметь значения по умолчанию, а правый не имеет значения по умолчанию (значение по умолчанию должно быть справа налево и должно быть непрерывный)

2. Нет корреляции между именем переменной, определенной вне функции, и формальным именем параметра, определенным функцией (то же имя), и нет конфликта, если несколько функций используют одно и то же имя формального параметра.


передать по ссылке

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

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

function 函数名(形参1,&形参2){
    
     //此时形参1是值传递   形参2是引用传递
	//函数体
}

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

$a = 1;
$b = 1;
function AddMyself($a,&$b)
{
    
    
    $a++;
    $b++;
}
AddMyself($a,$b);
echo $a,'<br/>',$b; // 1   2

Меры предосторожности при передаче значения по ссылке: при передаче фактических параметров необходимо передавать переменные.


возвращаемое значение функции

Возвращаемое значение: return относится к результату реализации функции, который возвращается за пределы функции (где функция вызывается) через ключевое слово return: все функции в PHP имеют возвращаемые значения . (Если явный возврат не используется, система по умолчанию возвращает NULL )

function display()
{
    
    
    echo "hello world";
}
var_dump(display()); //NULL

Возвращаемое значение функции может иметь любой тип данных.


ключевое слово возврата

  1. Значение return внутри функции: возвращает результат текущей функции (текущая функция завершается, и последующий код возврата не будет выполнен)
  2. return также можно использовать непосредственно в файле (не в функции): это означает, что файл передает содержимое после возврата результата в место, содержащее текущий файл. (Обычно используется больше в файлах конфигурации системы), в файле также означает завершение кода файла: содержимое после возврата не будет выполнено
$res = include_once 'func.hpp'; //假设该文件return 'hello world'
echo $res;//hello world

объем

Область: область, в которой можно получить доступ к переменным (константам).

1. Переменные можно определять в обычном коде.

2. Переменные также можно определять внутри функций.


Строго говоря, область видимости в PHP делится на два типа: но PHP также определяет некоторые типы вне строгого смысла, поэтому всего типов три:

1. Глобальная переменная: это переменная, определенная пользователем (определенная вне функции).

  • Собственное глобальное пространство: разрешено только в глобальном пространстве в PHP: теоретически недоступно внутри функции.
  • Цикл скрипта: до конца скрипта (выполняется последняя строка кода)
$glo = 'global area'; 

function func()
{
    
    
    $inner = __FUNCTION__;
    echo $glo;//err,函数内部不可访问外部全局变量
}

2. Локальные переменные: переменные, определенные внутри функции.

  • Принадлежность к текущему функциональному пространству: в PHP его можно использовать только внутри текущей функции.
  • Функциональный цикл: конец выполнения функции (функция открывает независимое пространство памяти в области стека для выполнения)

3. Суперглобальные переменные: системные переменные (предопределенные переменные: $_SERVER, $_POST и т. д.).

  • Принадлежность к суперглобальному пространству: нет ограничений доступа (доступен как внутри, так и вне функции)

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

$glo = 'global area'; 

function func()
{
    
    
    echo $GLOBALS['glo'];
}

func(); //global area
echo '<hr/>';
echo $glo; //global area

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

глобальное ключевое слово

В PHP на самом деле есть другой способ добиться глобального доступа к локальному, и в то же время локальный также может получить доступ к глобальному : ключевое слово global

Глобальное ключевое слово: способ определения переменных в функции.

1. Если имя переменной, определенное с помощью global, существует снаружи (глобальная переменная), то переменная, определенная системой внутри функции, напрямую указывает на пространство памяти, на которое указывает внешняя глобальная переменная (та же переменная);

2. Если имя переменной, определенное с помощью global, не существует снаружи (глобальная переменная), система автоматически определит глобальную переменную с тем же именем, что и локальная переменная, в глобальном пространстве (снаружи).

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

грамматические правила

global 变量名;//不能赋值
$变量名 =;

пример:

$global = 'global area'; 
function func()
{
    
    
    //外部存在同名的global变量
    //函数内部定义的变量直接指向外部全局变量所指向的内存空间
    global $global; 
    echo $global;

    //定义全局不存在变量
    global $local;
    $local = 'inner func';
}
func(); //global area
echo '<hr/>';
echo $local;//访问"局部"变量  inner func

Вышеупомянутые методы позволяют обеспечить взаимные посещения между локальными и глобальными сетями, но обычно они не используются таким образом. Обычно, если есть специальное использование, доступ к нему также будет осуществляться в виде параметров. (Вы также можете использовать константы: константы, определенные с помощью define)

define('PI', 3.14);

function func()
{
    
    
    echo PI;
}
func(); //3.14
echo PI;//3.14

статическая переменная

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

грамматика

function 函数名(){
    
    
	//定义变量
	static $变量名 =;		//通常会在定义的时候就直接赋值
}

пример

function func()
{
    
    
    $local = 0;
    static $count = 0;
    $count++;
    $local++;

    echo $local," ",$count;
}
func(); echo '<hr/>';//1 1
func(); echo '<hr/>';//1 2
func(); echo '<hr/>';//1 3

Роль статических переменных заключается в совместном использовании данных между функциями (одна и та же функция вызывается несколько раз).

использовать

1. Для статистики: количество вызовов текущей функции.

2. Чтобы согласовать разные результаты, полученные при многократном вызове функции (рекурсивное мышление)


переменная функция

Функция переменной: в настоящее время в переменной сохраняется значение, которое является именем функции, поэтому его можно использовать $变量()в качестве имени функции.

  • Эта переменная эквивалентна указателю на функцию в языке C.

грамматика

$变量名 = '函数名'
function 函数名(函数参数){
    
    
    //...
}
$变量名(函数参数)

Пример использования

$func = 'display';
function display()
{
    
    
    echo "hell I am function display()" ;
}
$func();//hell I am function display()

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

//假设是系统函数 -求第二个参数的4次方
function sys_func($arg1,$arg2)
{
    
    
    return $arg1($arg2);//user_func($agr2)
}
function user_func($num)
{
    
    
    return pow($num,4);
}
echo sys_func('user_func',10);//求10^4  ==> 10000

анонимная функция

Анонимная функция ==> функция без имени

базовая грамматика

变量名 = function(函数参数){
    
    
    //函数体
}

Используйте переменную для сохранения анонимной функции, которая по сути является объектом (замыкание).


Пример использования

$func = function(){
    
    
    echo "hello world";
};
$func();//hello world
var_dump($func);//object(Closure)#1 (0) { }

Закрытие

Проще говоря: внутри функции есть некоторые локальные переменные, которые не освобождаются после выполнения функции, поскольку внутри функции есть ссылки на соответствующие функции (внутренняя функция функции: анонимная функция).

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

1. Используйте внутренние анонимные функции;

2. Анонимные функции используют внешние локальные переменные: use;

3. Анонимные функции возвращаются для внешнего использования.

function func()
{
    
    
    $name = "HELLO WORLD";

    //定义匿名函数
    //use就是将外部局部变量保留给内部使用
    $innerFunction = function() use($name)
    {
    
    
        echo $name;
    }; //注意分号!
    return $innerFunction;//返回内部匿名函数
}
$get = func(); //$get = $innerFunction
$get();//HELLO WORLD

Общие системные функции

функция вывода

print(): Подобно содержимому, предоставляемому выводом echo, это, по сути, структура (а не функция), но она имеет возвращаемое значение, всегда возвращает 1, и нет необходимости использовать круглые скобки.

print_r(): похож на var_dump, но проще, чем var_dump, он не выводит тип данных, а только значение (чаще используется печать массива)

функция времени

date(): в соответствии с указанным форматом соедините соответствующую временную метку (количество секунд от GMT в 1970 году), если конкретная временная метка не указана, то по умолчанию интерпретируется текущая временная метка .

time(): получить временную метку, соответствующую текущему времени.

microtime(): получить время на уровне микросекунд.

strtotime(): конвертирует строку указанного формата в метку времени.

echo time(),'<br/>';
echo microtime(),'<br/>';
echo strtotime('tomorrow 10 hours');

математическая функция

max(): указывает наибольшее значение параметра.

min(): сравнивает меньшее из двух чисел

rand(): Получить случайное число, случайное целое число в указанном интервале.

mt_rand(): То же, что и rand, но базовая структура другая, а эффективность выше, чем у rand (рекомендуется).

round(): округление

ячейка(): округлить вверх

пол(): округлить вниз

pow(): найти указанный индекс указанного числа. Результат: pow(2,8) == 2^8 == 256.

абс(): абсолютное значение

sqrt(): найти квадратный корень


Функции, связанные с функциями

function_exists(): определяет, существует ли указанное имя функции в памяти (помогает пользователям не использовать несуществующую функцию, делая код более безопасным).

func_get_arg(): получить параметр, соответствующий указанному значению в пользовательской функции.

func_get_args(): получить все параметры пользовательской функции (возвращается в виде массива)

func_num_args(): получить количество параметров (число) текущей пользовательской функции.

function testFunc($a,$b)
{
    
    
    //获取指定参数 --获取第一个参数
    var_dump(func_get_arg(1));

    //获取所有参数
    var_dump(func_get_args());

    //获取参数数量
    var_dump(func_num_args());
}
echo '<pre>';
//短路运算,该函数存在才调用
function_exists('testFunc') && testFunc(1,'2',3.14);

выход:

string(1) "2"
array(3) {
    
    
  [0]=>
  int(1)
  [1]=>
  string(1) "2"
  [2]=>
  float(3.14)
}
int(3)

Примечание. Идентификация параметров начинается с 0, func_get_args и func_num_args — это количество соответствующих фактических параметров.

Supongo que te gusta

Origin blog.csdn.net/chuxinchangcun/article/details/132450888
Recomendado
Clasificación