首页 > 编程 > PHP > 正文

PHP手册学习

2019-11-09 20:28:17
字体:
来源:转载
供稿:网友
php 也允许使用短标记 <? 和 ?>,但不鼓励使用。只有通过激活 php.ini 中的 short_open_tag 配置指令或者在编译 PHP 时使用了配置选项 –enable-short-tags 时才能使用短标记。如果文件内容是纯 PHP 代码,最好在文件末尾删除 PHP 结束标记。这可以避免在 PHP 结束标记之后万一意外加入了空格或者换行符,会导致 PHP 开始输出这些空白,而脚本中此时并无输出的意图。可以在 PHP 中使用四对不同的开始和结束标记。其中两种,<?php ?><script language="php"> </script> 总是可用的。另两种是短标记和 asp 风格标记,可以在 php.ini 配置文件中打开或关闭。尽管有些人觉得短标记和 ASP 风格标记很方便,但移植性较差,通常不推荐使用。 Note: 此外注意如果将 PHP 嵌入到 xml 或 XHTML 中则需要使用 <?php ?>标记以保持符合标准。如果想查看某个表达式的值和类型,用 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 integerecho gettype($a_bool); // PRints out: booleanecho gettype($a_str); // prints out: string// If this is an integer, increment it by fourif (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";}?>如果要将一个变量强制转换为某类型,可以对其使用强制转换或者settype()函数。通常运算符所返回的 boolean 值结果会被传递给控制流程。要明确地将一个值转换成 boolean,用 (bool) 或者 (boolean) 来强制转换。但是很多情况下不需要用强制转换,因为当运算符,函数或者流程控制结构需要一个 boolean 参数时,该值会被自动转换-1 和其它非零值(不论正负)一样,被认为是 TRUE!var_dump((bool) ""); // bool(false)var_dump((bool) 1); // bool(true)var_dump((bool) -1); // bool(true)var_dump((bool) "foo"); // bool(true)var_dump((bool) 2.3e5); // bool(true)var_dump((bool) array(12)); // bool(true)var_dump((bool) array()); // bool(false)var_dump((bool) "false"); // bool(true)

结果

bool(false)bool(true)bool(true)bool(true)bool(true)bool(true)bool(false)bool(true)一个 integer 是集合 ℤ = {…, -2, -1, 0, 1, 2, …} 中的一个数。GMP for PHP 和 GMP函数$a = 1234; // 十进制数$a = -123; // 负数$a = 0123; // 八进制数 (等于十进制 83)$a = 0x1A; // 十六进制数 (等于十进制 26)如果给定的一个数超出了 integer 的范围,将会被解释为 float。同样如果执行的运算结果超出了 integer 范围,也会返回 float。 下面是32位的溢出$large_number = 2147483647;var_dump($large_number); // int(2147483647)$large_number = 2147483648;var_dump($large_number); // float(2147483648)$million = 1000000;$large_number = 50000 * $million;var_dump($large_number); // float(50000000000)int(2147483647)double(2147483648)double(50000000000)

64位的溢出

$large_number = 9223372036854775807;var_dump($large_number); // int(9223372036854775807)$large_number = 9223372036854775808;var_dump($large_number); // float(9.2233720368548E+18)$million = 1000000;$large_number = 50000000000000 * $million;var_dump($large_number); // float(5.0E+19)double(9.2233720368548E+18)double(9.2233720368548E+18)double(5.0E+19)PHP 中没有整除的运算符。1/2 产生出 float 0.5。值可以舍弃小数部分强制转换为 integer,或者使用 round() 函数可以更好地进行四舍五入。var_dump(25/7); // float(3.5714285714286)var_dump((int) (25/7)); // int(3)var_dump(round(25/7)); // double(4)永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者gmp 函数 。某些数学运算会产生一个由常量 NAN 所代表的结果。此结果代表着一个在浮点数运算中未定义或不可表述的值。任何拿此值与其它任何值进行的松散或严格比较的结果都是 FALSE。由于 NAN 代表着任何不同值,不应拿 NAN 去和其它值进行比较,包括其自身,应该用 is_nan() 来检查。Heredoc 结构 第三种表达字符串的方法是用 heredoc 句法结构:<<<。在该运算符之后要提供一个标识符,然后换行。接下来是字符串 string 本身,最后要用前面定义的标识符作为结束标志。 结束时所引用的标识符必须在该行的第一列,而且,标识符的命名也要像其它标签一样遵守 PHP 的规则:只能包含字母、数字和下划线,并且必须以字母和下划线作为开头。<?php/** * Created by Zoe. * User: Administrator * Date: 2017/2/8 * Time: 9:16 */$str = <<<EODExample of stringspanning multiple linesusing heredoc syntax.EOD;/* 含有变量的更复杂示例 */class foo{ var $foo; var $bar; function foo() { $this->foo = 'Foods'; $this->bar = array('apple', 'strawberry', 'watermelon'); }}$foo = new foo();$name = 'Zoe';echo <<<EOTMy name is "$name". I am printing some $foo->foo.Now, I am printing some {$foo->bar[1]}.This should print a capital 'A': /x41EOT;My name is "Zoe". I am printing some Foods.Now, I am printing some strawberry.This should print a capital 'A': AProcess finished with exit code 0数组 <?php$array = array( "foo" => "bar", "bar" => "foo",);// 自 PHP 5.4 起$array = [ "foo" => "bar", "bar" => "foo",];?>如果在数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖了。PHP 数组可以同时含有 integer 和 string 类型的键名,因为 PHP 实际并不区分索引数组和关联数组。数组单元可以通过 array[key] 语法来访问。方括号和花括号可以互换使用来访问数组单元(例如 array[42]和array{42} 在上例中效果相同)。自 PHP 5.4 起可以用数组间接引用函数或方法调用的结果。之前只能通过一个临时变量。自 PHP 5.5 起可以用数组间接引用一个数组原型。初始化变量的最好方式是直接给其赋值。。要修改某个值,通过其键名给该单元赋一个新值。要删除某键值对,对其调用 unset() 函数。// 创建一个简单的数组$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() 函数foreach 控制结构是专门用于数组的。它提供了一个简单的方法来遍历数组。在方括号(“[”和“]”)之间必须有一个表达式。重申一次,在双引号字符串中,不给索引加上引号是合法的因此 "$foo[bar]" 是合法的(“合法”的原文为 valid。在实际测试中,这么做确实可以访问数组的该元素,但是会报一个常量未定义的 notice。无论如何,强烈建议不要使用 $foo[bar]这样的写法,而要使用 $foo[‘bar’] 来访问数组中元素。–haohappy 注)。至于为什么参见以上的例子和字符串中的变量解析中的解释.可以用 array_diff() 和数组运算符来比较数组。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表