菜鸟教程 -- 学的不仅是技术,更是梦想!

PHP 教程
(追記) (追記ここまで)

PHP 变量


变量是用于存储信息的"容器":

实例

<?php$x=5; $y=6; $z=$x+$y; echo$z; ?>

运行实例 »

与代数类似

x=5
y=6
z=x+y

在代数中,我们使用字母(如 x),并给它赋值(如 5)。

从上面的表达式 z=x+y ,我们可以计算出 z 的值为 11。

在 PHP 中,这些字母被称为变量

lamp 变量是用于存储数据的容器。


PHP 变量

与代数类似,可以给 PHP 变量赋予某个值(x=5)或者表达式(z=x+y)。

变量可以是很短的名称(如 x 和 y)或者更具描述性的名称(如 age、carname、totalvolume)。

PHP 变量规则:

  • 变量以 $ 符号开始,后面跟着变量的名称
  • 变量名必须以字母或者下划线字符开始
  • 变量名只能包含字母、数字以及下划线(A-z、0-9 和 _ )
  • 变量名不能包含空格
  • 变量名是区分大小写的($y 和 $Y 是两个不同的变量)
lamp PHP 语句和 PHP 变量都是区分大小写的。

创建(声明)PHP 变量

PHP 没有声明变量的命令。

变量在您第一次赋值给它的时候被创建:

实例

<?php$txt="Hello world!"; $x=5; $y=10.5; ?>

运行实例 »

在上面的语句执行中,变量 txt 将保存值 Hello world!,且变量 x 将保存值 5

注释:当您赋一个文本值给变量时,请在文本值两侧加上引号。


PHP 是一门弱类型语言

在上面的实例中,我们注意到,不必向 PHP 声明该变量的数据类型。

PHP 会根据变量的值,自动把变量转换为正确的数据类型。

在强类型的编程语言中,我们必须在使用变量前先声明(定义)变量的类型和名称。


PHP 变量作用域

变量的作用域是脚本中变量可被引用/使用的部分。

PHP 有四种不同的变量作用域:

  • local
  • global
  • static
  • parameter

局部和全局作用域

在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字。

在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问:

实例

<?php
$x=5; // 全局变量

function myTest()
{
$y=10; // 局部变量
echo "<p>测试函数内变量:<p>";
echo "变量 x 为: $x";
echo "<br>";
echo "变量 y 为: $y";
}

myTest();

echo "<p>测试函数外变量:<p>";
echo "变量 x 为: $x";
echo "<br>";
echo "变量 y 为: $y";
?>

在以上实例中 myTest() 函数定义了 $x 和 $y 变量。 $x 变量在函数外声明,所以它是全局变量 , $y 变量在函数内声明所以它是局部变量。

当我们调用myTest()函数并输出两个变量的值, 函数将会输出局部变量 $y 的值,但是不能输出 $x 的值,因为 $x 变量在函数外定义,无法在函数内使用,如果要在一个函数中访问一个全局变量,需要使用 global 关键字。

然后我们在myTest()函数外输出两个变量的值,函数将会输出全局变量 $x 的值,但是不能输出 $y 的值,因为 $y 变量在函数中定义,属于局部变量。

Note 你可以在不同函数中使用相同的变量名称,因为这些函数内定义的变量名是局部变量,只作用于该函数内。

PHP global 关键字

global 关键字用于函数内访问全局变量。

在函数内调用函数外定义的全局变量,我们需要在函数中的变量前加上 global 关键字:

实例

<?php$x=5; $y=10; functionmyTest(){global$x,$y; $y=$x+$y; }myTest(); echo$y; // 输出 15?>

运行实例 »

PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。

上面的实例可以写成这样:

实例

<?php$x=5; $y=10; functionmyTest(){$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y']; }myTest(); echo$y; ?>

运行实例 »


Static 作用域

当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。

要做到这一点,请在您第一次声明变量时使用 static 关键字:

实例

<?phpfunctionmyTest(){static$x=0; echo$x; $x++; echoPHP_EOL; // 换行符}myTest(); myTest(); myTest(); ?>

运行实例 »

然后,每次调用该函数时,该变量将会保留着函数前一次被调用时的值。

注释:该变量仍然是函数的局部变量。


参数作用域

参数是通过调用代码将值传递给函数的局部变量。

参数是在参数列表中声明的,作为函数声明的一部分:

实例

<?phpfunctionmyTest($x){echo$x; }myTest(5); ?>

我们将在 PHP 函数 章节对它做更详细的讨论。

AI 思考中...

3 篇笔记 写笔记

  1. #0

    佛系coder

    222***[email protected]

    885
    • 1、定义在函数外部的就是全局变量,它的作用域从定义处一直到文件结尾。
    • 2、函数内定义的变量就是局部变量,它的作用域为函数定义范围内。
    • 3、函数之间存在作用域互不影响。
    • 4、函数内访问全局变量需要 global 关键字或者使用 $GLOBALS[index] 数组

    在 php 中函数是有独立的作用域,所以局部变量会覆盖全局变量,即使局部变量中没有全局变量相同的变量,也会被覆盖。如下:

    <?php
    $a=5;
    $b=3;
    function t()
    {
     echo $a-$b; // 输出 0
    }
    t();
    ?>
    

    要想在函数中直接使用全局变量可以通过 global 关键字声明或者通过 php 中自定义的 $GLOBALS 数组获取:

    <?php
    $a=5;
    $b=3;
    function t1()
    { 
     global $a,$b;
     echo $a-$b; // 输出 2
    }
    t1();
    echo PHP_EOL;
    function t2()
    {
     echo $GLOBALS['a']-$GLOBALS['b']; // 输出 2
    }
    t2();
    ?>
    
    佛系coder

    佛系coder

    222***[email protected]

    8年前 (2018年04月26日)
  2. #0

    南宫晟醺

    132***[email protected]

    264

    PHP 变量作用域

    变量的作用域是脚本中变量可被引用和使用的部分,PHP 中有四种不同的变量作用域:

    序号 作用域 描述
    1 local 局部作用域
    2 global 全局作用域
    3 static 静态作用域
    4 parameter 函数参数作用域

    1、local(本地的)—— 局部变量的作用域

    在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问。

    <?php
    function test()
    {
     $a = 15;
     echo "内部输出结果:" . $a;
    }
    echo "外部输出结果:" . $a; // 无法访问变量 a
    echo PHP_EOL;
    test();
    ?>

    输出结果:

    外部输出结果:
    内部输出结果:15

    2、global(总体的)—— 全局变量的作用域

    在所有函数外部定义的变量是全局变量,除了函数外,全局变量可以被脚本中的任何部分访问、要在一个函数中访问一个全局变量,需要使用 global 关键字。

    <?php
    $x = 5;
    $y = 10;
    $z = 0;
    function test()
    {
     global$x,$y,$z;
     $z = $x + $y;
    }
    test();
    echo $z;
    ?>

    结果:15

    PHP 将所有的全局变量存储在一个名为 $GLOBALS[index] 的数组里,index 保存变量的名称。

    这个数组可以在函数内部访问,也可以直接用来更新全局变量。

    <?php
    $x = 5;
    $y = 10;
    $z = 0;
    function test()
    {
     $GLOBALS['z'] = $GLOBALS['x']+$GLOBALS['y'];
    }
    Test();
    echo $z;
    ?>

    结果:15

    3、static(静态的)—— static 作用域

    当一个函数执行完成时,它的所有变量通常都会被删除。

    然而,有时需要局部变量不要被删除,要做到这一点,请在您第一次声明变量时使用 static 关键字。

    当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。

    <?php
    function test() {
     static $x=0;
     echo $x . " ";
     $x++;
    }
    test();
    test();
    test();
    test();
    ?>

    结果:0 1 2 3

    每次调用函数时, 该变量将会保留请前函的前被调用的值一次。

    4、parameter(参数)——参数作用域

    参数是通过调用代码将值传递给函数的局部变量。

    关于局部变量和全局变量的优先级,因为在PHP中函数都有自己单独的作用域,所以在局部变量的优先级要大于全局变量(在你不声明这个变量之前),声明之后此变量就变成了局部变量如果修改值那么全局变量的值也会改变。

    <?php
    $a = 10;
    $b = 5;
    function test()
    {
     $a = 15;
     $b = 5;
     $z = $a-$b;
     echo $z;
    }
    test();
    function test1()
    {
     global $a,$b;
     $a = 15;
     $b = 5;
     $z = $a-$b;
     echo PHP_EOL;
     echo $z;
    }
    test1();
    function test2()
    {
     global $a,$b;
     $z= $a-$b;
     echo PHP_EOL;
     echo $z;
    }
    test2();
    ?>

    结果:10 10 10

    南宫晟醺

    南宫晟醺

    132***[email protected]

    6年前 (2020年09月07日)
  3. #0

    用生活的例子说明类的属性和方法

    假设你正在开发一个在线商店,你需要定义一个"产品"类来管理你的所有产品。每个产品都有一些共同的属性,例如名称、描述、价格等,同时也有一些不同的属性,例如尺寸、颜色、重量等。

    在这个场景中,我们可以将每个产品看作一个类,而每个产品的属性和方法看作该类的属性和方法。例如,你可以定义一个名为"Product"的类来代表你的产品,该类可以有以下属性和方法:

    属性:

    • $name: 产品名称
    • $description: 产品描述
    • $price: 产品价格
    • $size: 产品尺寸
    • $color: 产品颜色
    • $weight: 产品重量

    方法:

    • setName($name): 设置产品名称
    • setDescription($description): 设置产品描述
    • setPrice($price): 设置产品价格
    • setSize($size): 设置产品尺寸
    • setColor($color): 设置产品颜色
    • setWeight($weight): 设置产品重量

    类比到编程中,你可以通过定义"Product"类来管理你的所有产品。你可以创建多个实例来代表不同的产品,每个实例都有一组独特的属性和方法,并可以通过调用类的方法来访问和修改这些属性。通过这种方式,你可以将代码组织成一个逻辑单元,并使用类的属性和方法来实现不同的功能。

    用生活的例子说明类作用域

    假设你是一名学生,你所在的学校有许多教师,每个教师都有自己的一些特殊技能,例如画画、打篮球等。在这个场景中,我们可以将每个教师看作一个类,而每个技能看作这个类的属性或方法。

    当你需要学习一项特定的技能时,你就需要找到具有该技能的教师,并向他学习。在这个过程中,你只能访问到这个教师的技能,而不能访问到其他教师的技能。这是因为每个教师的技能只属于这个教师的类作用域。

    类比到编程中,类作用域也是指在类中定义的属性和方法只能在该类内部访问。这意味着,如果你需要访问一个类中的属性或方法,你必须先创建该类的实例,并使用该实例来访问属性或方法。与生活中的例子类似,这种限制可以提高代码的安全性和可维护性,同时也使得代码更易于理解和组织。

    用生

    假设你是一个在一家公司工作的员工,你的公司有一个设备,可以记录员工的出勤天数。每当你到达公司并上班时,你就需要使用这个设备打卡,以记录你的出勤时间。

    在这个场景中,这个设备就可以看做一个静态变量,因为它在多次打卡之间保留着状态。每次你打卡时,设备记录了你的出勤天数,并将这个数字存储在内存中,以便在下次打卡时使用。这样,无论你是上班第一天还是第一百天,这个设备都能够正确地计算你的出勤天数。

    类比到编程中,静态变量也可以在函数的多次调用之间共享状态,并在下一次调用函数时使用,从而提高代码的效率和可维护性。

    活中的例子说明静态作用

    用生活中的例子说明说明是参数作用域域

    在生活中,可以用"房屋出租"来比喻参数作用域的概念。

    假设你是一位房屋中介,你的客户希望租一套房子。你的任务是为他们找到一个合适的房子。为了实现这个目标,你需要了解客户的要求,例如他们想要几个卧室、几个卫生间等等。这些要求就可以看作是函数的参数。

    一旦你了解了客户的要求,你就可以根据这些要求来找到符合条件的房子。在这个过程中,你只需要在函数内部处理这些要求,而不需要考虑其他客户可能的要求。这就是参数作用域的概念:函数的参数只在函数内部起作用,对于函数外部的其他代码来说,这些参数是不可见的。

    类比到编程中,参数作用域就是指函数的参数只在函数内部有效,对于函数外部的代码来说是不可见的。这意味着在函数内部你可以使用这些参数进行一些操作,而不需要担心这些操作会对其他代码造成影响。

    3年前 (2023年04月27日)

点我分享笔记

  • 昵称 (必填)
  • 邮箱 (必填)
  • 引用地址

AltStyle によって変換されたページ (->オリジナル) /