zoukankan      html  css  js  c++  java
  • 《PHP Manual》阅读笔记1

    1、phpinfo() 从 PHP 获取系统信息。

    2、$_SERVER 只是 PHP 自动全局化的变量之一。它包含了 web 服务器提供的所有信息,被称为超全局变量。

    3、htmlspecialchars() 使得 HTML 之中的特殊字符被正确的编码,从而不会被使用者在页面注入 HTML 标签或者 Javascript 代码。

    4、$_REQUEST 它包含了所有 GET、POST、COOKIE 和 FILE 的数据。

    5、PHP » 4.1.0 版本引入了如下超全局数组变量$_GET$_POST$_COOKIE$_SERVER$_FILES$_ENV$_REQUEST 以及 $_SESSION

    6、配置文件(php.ini)在 PHP 启动时被读取。对于服务器模块版本的 PHP,仅在 web 服务器启动时读取一次。对于 CGICLI 版本,每次调用都会读取。

    7、PHP 也允许使用短标记 <??>,但不鼓励使用。只有通过激活 php.ini 中的 short_open_tag 配置指令或者在编译 PHP 时使用了配置选项 --enable-short-tags 时才能使用短标记。

    8、如果文件内容是纯 PHP 代码,最好在文件末尾删除 PHP 结束标记。这可以避免在 PHP 结束标记之后万一意外加入了空格或者换行符,会导致 PHP 开始输出这些空白,而脚本中此时并无输出的意图。

    <?php
    echo "Hello world";
    
    // ... more code
    
    echo "Last statement";
    
    // 脚本至此结束,并无 PHP 结束标记 

    9、自 PHP 5.4 起,短格式的 echo 标记 <?= 总会被识别并且合法,而不管 short_open_tag 的设置是什么。

    10、PHP 支持 8 种原始数据类型。

    • 四种标量类型:boolean(布尔型); integer(整型); float(浮点型,也称作 double); string(字符串);

    • 两种复合类型:array(数组); object(对象)

    • 最后是两种特殊类型:resource(资源);NULL(无类型)

    11、如果想查看某个表达式的值和类型,用 var_dump() 函数。

    如果只是想得到一个易读懂的类型的表达方式用于调试,用 gettype() 函数。要查看某个类型,不要gettype(),而用 is_type 函数。以下是一些范例:

    <?php
    $a_bool = TRUE;   // a boolean
    $a_str  = "foo";  // a string
    $a_str2 = 'foo';  // a string
    $an_int = 12;     // an integer
    
    echo gettype($a_bool); // prints out:  boolean
    echo gettype($a_str);  // prints out:  string
    
    // If this is an integer, increment it by four
    if (is_int($an_int)) {
        $an_int += 4;
    }
    
    // If $bool is a string, print it out
    // (does not print out anything)
    if (is_string($a_bool)) {
        echo "String: $a_bool";
    }
    ?> 

    12、当转换为 boolean 时,以下值被认为是 FALSE

    所有其它值都被认为是 TRUE(包括任何资源)。

    13、整型值可以使用十进制,十六进制,八进制或二进制表示,前面可以加上可选的符号(- 或者 +)。二进制表达的 integer 自 PHP 5.4.0 起可用。要使用八进制表达,数字前必须加上 0(零)。要使用十六进制表达,数字前必须加上 0x。要使用二进制表达,数字前必须加上 0b

    <?php
    $a = 1234; // 十进制数
    $a = -123; // 负数
    $a = 0123; // 八进制数 (等于十进制 83)
    $a = 0x1A; // 十六进制数 (等于十进制 26)
    ?> 
    • 64 位平台下的最大值通常是大约 9E18。PHP 不支持无符号整数。Integer 值的字长可以用常量 PHP_INT_SIZE来表示,自 PHP 4.4.0 和 PHP 5.0.5后,最大值可以用常量 PHP_INT_MAX 来表示。

    • 要明确地将一个值转换为 integer,用 (int)(integer) 强制转换。不过大多数情况下都不需要强制转换,因为当运算符,函数或流程控制需要一个 integer 参数时,值会自动转换。还可以通过函数 intval() 来将一个值转换成整型。

    • 当从浮点数转换成整数时,将向下取整。如果浮点数超出了整数范围(32 位平台下通常为 +/- 2.15e+9 = 2^31,64 位平台下通常为 +/- 9.22e+18 = 2^63),则结果为未定义,因为没有足够的精度给出一个确切的整数结果。在此情况下没有警告,甚至没有任何通知!

    14、以十进制能够精确表示的有理数如 0.10.7,无论有多少尾数都不能被内部所使用的二进制精确表示,因此不能在不丢失一点点精度的情况下转换为二进制的格式,这就会造成混乱的结果。

    • 例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999999991118...所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者 gmp 函数
    • 某些数学运算会产生一个由常量 NAN 所代表的结果。此结果代表着一个在浮点数运算中未定义或不可表述的值。任何拿此值与其它任何值进行的松散或严格比较的结果都是 FALSE。由于 NAN 代表着任何不同值,不应拿 NAN 去和其它值进行比较,包括其自身,应该用 is_nan() 来检查。

    15、一个字符串 string 就是由一系列的字符组成,其中每个字符等同于一个字节。这意味着 PHP 只能支持 256 的字符集,因此不支持 Unicode 。

    • 一个字符串可以用 4 种方式表达:单引号,  双引号heredoc 语法结构nowdoc 语法结构(自 PHP 5.3.0 起);

    • 要表达一个单引号自身,需在它的前面加个反斜线()来转义。要表达一个反斜线自身,则用两个反斜线(\)。其它任何方式的反斜线都会被当成反斜线本身:也就是说如果想使用其它转义序列例如 或者 ,并不代表任何特殊含义,就单纯是这两个字符本身。

    • 如果字符串是包围在双引号(")中, PHP 将对一些特殊的字符进行解析:

    16、可以用 array() 语言结构来新建一个数组。它接受任意数量用逗号分隔的 键(key) => 值(value)对。 自 5.4 起可以使用短数组定义语法,用 [] 替代 array()

    key 可以是 integer 或者 stringvalue 可以是任意类型。此外 key 会有如下的强制转换:

    • 包含有合法整型值的字符串会被转换为整型。例如键名 "8" 实际会被储存为 8。但是 "08" 则不会强制转换,因为其不是一个合法的十进制数值。

    • 浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8

    • 布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0

    • Null 会被转换为空字符串,即键名 null 实际会被储存为 ""

    • 数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type

    如果在数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖了。

    如果给出方括号但没有指定键名,则取当前最大整数索引值,新的键名将是该值加上 1(但是最小为 0)。如果当前还没有整数索引,则键名将为 0

    注意这里所使用的最大整数键名不一定当前就在数组中。它只要在上次数组重新生成索引后曾经存在过就行了。以下面的例子来说明:

    <?php
    // 创建一个简单的数组
    $array = array(1, 2, 3, 4, 5);
    print_r($array);
    
    // 现在删除其中的所有元素,但保持数组本身不变:
    foreach ($array as $i => $value) {
        unset($array[$i]);
    }
    print_r($array);
    
    // 添加一个单元(注意新的键名是 5,而不是你可能以为的 0)
    $array[] = 6;
    print_r($array);
    
    // 重新索引:
    $array = array_values($array);
    $array[] = 7;
    print_r($array);
    ?> 

     输出:

    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
        [3] => 4
        [4] => 5
    )
    Array
    (
    )
    Array
    (
        [5] => 6
    )
    Array
    (
        [0] => 6
        [1] => 7
    )

     unset() 函数允许删除数组中的某个键。但要注意数组将不会重建索引。如果需要删除后重建索引,可以用 array_values() 函数。

    <?php
    $a = array(1 => 'one', 2 => 'two', 3 => 'three');
    unset($a[2]);
    /* will produce an array that would have been defined as
       $a = array(1 => 'one', 3 => 'three');
       and NOT
       $a = array(1 => 'one', 2 =>'three');
    */
    
    $b = array_values($a);
    // Now $b is array(0 => 'one', 1 =>'three')
    ?> 

     在双引号字符串中,不给索引加上引号是合法的因此 "$foo[bar]" 是合法的("合法"的原文为 valid。在实际测试中,这么做确实可以访问数组的该元素,但是会报一个常量未定义的 notice。无论如何,强烈建议不要使用 $foo[bar]这样的写法,而要使用 $foo['bar'] 来访问数组中元素。--haohappy 注)。

        $bar=["bar"=>"e123"];
        echo "$bar[bar]";  //e123
        echo $bar['bar']   //e123
        //echo $bar[bar] //Notice: Use of undefined constant bar - assumed 'bar' in D:xampphtdocsindex.php on line 4

    17、在下列情况下一个变量被认为是 NULL:被赋值为 NULL; 尚未被赋值; 被 unset()NULL 类型只有一个值,就是不区分大小写的常量 NULL

    18、使用引用赋值,简单地将一个 & 符号加到将要赋值的变量前(源变量)。例如,下列代码片断将输出"My name is Bob"两次:

    <?php
    $foo = 'Bob';              // 将 'Bob' 赋给 $foo
    $bar = &$foo;              // 通过 $bar 引用 $foo
    $bar = "My name is $bar";  // 修改 $bar 变量
    echo $bar;
    echo $foo;                 // $foo 的值也被修改
    ?> 

    有一点重要事项必须指出,那就是只有有名字的变量才可以引用赋值。

    <?php
    $foo = 25;
    $bar = &$foo;      // 合法的赋值
    $bar = &(24 * 7);  // 非法; 引用没有名字的表达式
    
    function test()
    {
       return 25;
    }
    
    $bar = &test();    // 非法
    ?> 

     19、这个脚本不会有任何输出,因为 echo 语句引用了一个局部版本的变量 $a,而且在这个范围内,它并没有被赋值。你可能注意到 PHP 的全局变量和 C 语言有一点点不同,在 C 语言中,全局变量在函数中自动生效,除非被局部变量覆盖。这可能引起一些问题,有些人可能不小心就改变了一个全局变量。PHP 中全局变量在函数中使用时必须声明为 global。

    <?php
    $a = 1; /* global scope */
    
    function Test()
    {
        echo $a; /* reference to local scope variable */
    }
    
    Test();
    ?> 
    <?php
    $a = 1;
    $b = 2;
    
    function Sum()
    {
        global $a, $b;
    
        $b = $a + $b;
    }
    
    Sum();
    echo $b;
    ?> 

    以上脚本的输出将是"3"。在函数中声明了全局变量 $a$b 之后,对任一变量的所有引用都会指向其全局版本。对于一个函数能够声明的全局变量的最大个数,PHP 没有限制。

    在全局范围内访问变量的第二个办法,是用特殊的 PHP 自定义 $GLOBALS 数组。前面的例子可以写成:

    <?php
    $a = 1;
    $b = 2;
    
    function Sum()
    {
        $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
    }
    
    Sum();
    echo $b;
    ?> 

    静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。

    20、有八个魔术常量它们的值随着它们在代码中的位置改变而改变。例如 __LINE__ 的值就依赖于它在脚本中所处的行来决定。这些特殊的常量不区分大小写,如下:

    几个 PHP 的"魔术常量"
    名称说明
    __LINE__ 文件中的当前行号。
    __FILE__ 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。
    __DIR__ 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增) =
    __FUNCTION__ 函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
    __CLASS__ 类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 FooBar)。注意自 PHP 5.4 起 __CLASS__ 对 trait 也起作用。当用在 trait 方法中时,__CLASS__ 是调用 trait 方法的类的名字。
    __TRAIT__ Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定义时的名字(区分大小写)。Trait 名包括其被声明的作用区域(例如 FooBar)。
    __METHOD__ 类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
    __NAMESPACE__ 当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。

    21、这样写"$b = ($a = 5)"和这样写"$a =5; $b=5"(分号标志着语句的结束)是一样的。因为赋值操作的顺序是由右到左的,也可以这么写"$b = $a =5"。

    本笔记截止到 语言参考 表达式 一节

  • 相关阅读:
    2月24日-寒假进度24
    2月23日-寒假学习进度23
    2月22日-寒假学习进度22
    2月21日-寒假学习进度21
    第一周冲刺意见汇总
    团队绩效评估
    团队工作第七天
    团队工作第六天
    团队工作第五天
    团队工作第四天
  • 原文地址:https://www.cnblogs.com/huansky/p/6115315.html
Copyright © 2011-2022 走看看