Blogger Information
Blog 32
fans 0
comment 0
visits 22158
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP 入门之一(写到哪、数据类型)
培(信仰)
Original
739 people have browsed it

PHP ?

什么是PHP

定义:即”PHP: Hypertext Preprocessor”,是一种被广泛应用的开源通用脚本语言,尤其适用于 Web 开发并可嵌入 HTML 中去。它的语法利用了 C、Java 和 Perl,易于学习。该语言的主要目标是允许 web 开发人员快速编写动态生成的 web 页面,但 PHP 的用途远不只于此。

怎么用在HTML页面上

html中一旦出现了php标签,那么文档的扩展名必须是php

  1. php代码就像css,js一样可以使用“标签方式”直接嵌入到html文档中
  2. php代码使用的标签:<?php ?>
  3. web 服务器只会将php标签的代码发送给php引擎(php.exe)处理
  4. html文档中嵌入的php代码段的“数量”和位置不受限制
  5. html文档存在php代码段时,扩展名必须是PHP才可以激活PHP引擎

将php写到html文档中

  1. <!-- 输出html文本 -->
  2. <?php
  3. echo '<h3 style="color:red">Hello PHP</h3>';
  4. ?>
  5. <!-- 短标签 -->
  6. <?
  7. // 如果只是输出一段动态文本或变量值
  8. // 如果只有一行语句或者最后一行语句,分号可选
  9. // 如果没有开启,到服务器PHP配置文件中 设置 short_open_tag = On
  10. echo '<h3 style="color:green">短标签输出内容</h3>'
  11. ?>
  12. <?= '<h3 style="color:red">短标签输出内容 省略echo</h3>' ?>
  13. <?php $str = '<h3 style="color:red">短标签输出内容 使用变量</h3>' ?>
  14. <?= $str ?>
  15. <!-- 自定义输出格式 -->
  16. <?php
  17. echo '<p>echo 输出无返回值</p>';
  18. // printf(模板,要输出的数据)
  19. printf('%d + %d = %d', 1, 2, (1 + 2));
  20. echo '<br>';
  21. // %d :整数;%s : 字符串 ;%f :浮点数
  22. // pdo:dsn,'mysql:host=localhost;dbname=phpedu;'
  23. $type = 'mysql';
  24. $host = 'localhost';
  25. $dbname = 'phpedu';
  26. echo 'printf()';
  27. echo '<br>';
  28. printf('%s:host=%s;dbname=%s;', $type, $host, $dbname);
  29. // 有时会把参数保存到数据表或者在网络上传输
  30. // sprintf(模板,要输出的数据),内容不输出只返回字符串,可保存和传递
  31. echo '<br>';
  32. echo '<hr>';
  33. echo 'sprintf()';
  34. echo '<br>';
  35. $dsn = sprintf('%s:host=%s;dbname=%s;', $type, $host, $dbname);
  36. echo '<br>';
  37. echo $dsn;
  38. echo '<hr>';
  39. // vprintf():支持数组参数
  40. echo '<br>';
  41. echo 'vprintf()';
  42. echo '<br>';
  43. $linkParams = [$type, $host, $dbname];
  44. $dsn = vprintf('%s:host=%s;dbname=%s;', $linkParams);
  45. echo '<br>';
  46. echo $dsn;
  47. echo '<hr>';
  48. // vsprintf():支持数组参数
  49. echo '<br>';
  50. echo 'vsprintf()';
  51. echo '<br>';
  52. $linkParams = [$type, $host, $dbname];
  53. $dsn = vsprintf('%s:host=%s;dbname=%s;', $linkParams);
  54. echo '<br>';
  55. echo $dsn;
  56. ?>

数据类型

PHP 支持 10 种原始数据类型

四种标量类型 四种复合类型 两种特殊类型
bool (布尔型) array(数组) resource(资源)
int (整形) object(对象) NULL(无类型)
float(浮点型,也称作double) callable(可调用)
string(字符串) iterable

伪类型

mixed(混合类型)
void(无类型)

1. Boolean 布尔类型

boolean 表达了真值,可以为 true 或 false

要指定一个布尔值,使用常量 true 或 false。两个都不区分大小写。

通常运算符所返回的 boolean 值结果会被传递给控制流程

  1. // == 是一个操作符,它检测两个变量是否相等,并返回一个布尔值
  2. if ($action == "show_version") {
  3. echo "The version is 1.23";
  4. }
  5. // 这样做是不必要的...
  6. if ($show_separators == TRUE) {
  7. echo "<hr>\n";
  8. }
  9. // ...因为可以使用下面这种简单的方式:
  10. if ($show_separators) {
  11. echo "<hr>\n";
  12. }

转换为布尔值

要明确地将一个值转换成Boolean,用 (bool) 或者 (boolean) 来强制转换。但是很多请客下不需要用强制转换,因为当运算符、函数或者流程控制结构需要一个Boolean参数时,该值会被自动转换。

  • 当转换为Boolean时,以下值被默认false:
  • 布尔值false本身
  • 整型值0(零) 及 -0(零)
  • 浮点型值 0.0 (零) -0.0(零)
  • 空字符串 ,以及字符串 “0”
  • 不包括任何元素的数组
  • 特殊类型NULL(包括尚未赋值的变量)
  • 从空标记生成的SimpleXML对象

所有其它值都被认为时true (包括任何资源和NAN)

-1 和 其它非零值(不论正负) 一样,被认为是true。

2. Integer整型

整型值可以使用十进制,十六进制,八进制或二进制表示,前面可以加上可选的符号(- 或者 +)。可以用 负运算符来表示一个负的integer

整数溢出

如果给定的一个数超出了 integer 的范围,将会被解释为 float。同样如果执行的运算结果超出了 integer 范围,也会返回 float。

转换成整型

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

将 resource 转换成 integer 时,结果会是 PHP 运行时为 resource 分配的唯一资源号。

  • 从布尔值转换

false 将产生出 0(零),true 将产生出 1(壹)。

  • 从浮点型转换

当从浮点数转换成整数时,将向下取整。

如果浮点数超出了整数范围(32 位平台下通常为 +/- 2.15e+9 = 2^31,64 位平台下,除了 Windows 且版本低于 PHP 7,通常为 +/- 9.22e+18 = 2^63),则结果为未定义,因为没有足够的精度给出一个确切的整数结果。在此情况下没有警告,甚至没有任何通知!

  • 从字符串转换

参见字符串转换为数值。

  • 从 NULL 转换

null 会转换为零 (0)。

Float浮点型

浮点型(也叫浮点数 float,双精度数 double 或实数 real)可以用以下任一语法定义
比较浮点数
所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。
要测试浮点数是否相等,要使用一个仅比该数值大一丁点的最小误差值。该值也被称为机器极小值(epsilon)或最小单元取整数,是计算中所能接受的最小的差别值。
$a 和 $b 在小数点后五位精度内都是相等的。

  1. $a = 1.23456789;
  2. $b = 1.23456780;
  3. $epsilon = 0.00001;
  4. if(abs($a-$b) < $epsilon) {
  5. echo "true";
  6. }

NAN

某些数学运算会产生一个由常量 NAN 所代表的结果。此结果代表着一个在浮点数运算中未定义或不可表述的值。任何拿此值与其它任何值(除了 true)进行的松散或严格比较的结果都是 false。

由于 NAN 代表着任何不同值,不应拿 NAN 去和其它值进行比较,包括其自身,应该用 is_nan() 来检查。

String 字符串

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

  • 单引号
  • 双引号
  • heredoc 语法结构
  • nowdoc 语法结构

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

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

\n 换行(ASCII 字符集中的 LF 或 0x0A (10))
\r 回车(ASCII 字符集中的 CR 或 0x0D (13))
\t 水平制表符(ASCII 字符集中的 HT 或 0x09 (9))
\v 垂直制表符(ASCII 字符集中的 VT 或 0x0B (11))(自 PHP 5.2.5 起)
\e Escape(ASCII 字符集中的 ESC 或 0x1B (27))(自 PHP 5.4.0 起)
\f 换页(ASCII 字符集中的 FF 或 0x0C (12))(自 PHP 5.2.5 起)
\ 反斜线
\$ 美元标记
\” 双引号
[0-7]{1,3} 符合该正则表达式序列的是一个以八进制方式来表达的字符
\x[0-9A-Fa-f]{1,2}

  • Heredoc 结构

第三种表达字符串的方法是用 heredoc 句法结构:<<<。在该运算符之后要提供一个标识符,然后换行。接下来是字符串 string 本身,最后要用前面定义的标识符作为结束标志。

结束时所引用的标识符必须在该行的第一列,而且,标识符的命名也要像其它标签一样遵守 PHP 的规则:只能包含字母、数字和下划线,并且必须以字母和下划线作为开头

  1. echo <<<str
  2. 这是一个heredoc结构
  3. str;
  • Nowdoc 结构

就象 heredoc 结构类似于双引号字符串,Nowdoc 结构是类似于单引号字符串的。Nowdoc 结构很象 heredoc 结构,但是 nowdoc 中不进行解析操作。这种结构很适合用于嵌入 PHP 代码或其它大段文本而无需对其中的特殊字符进行转义。与 SGML 的 <![CDATA[ ]]> 结构是用来声明大段的不用解析的文本类似,nowdoc 结构也有相同的特征。

一个 nowdoc 结构也用和 heredocs 结构一样的标记 <<<, 但是跟在后面的标识符要用单引号括起来,即 <<<’EOT’。Heredoc 结构的所有规则也同样适用于 nowdoc 结构,尤其是结束标识符的规则。

  1. echo <<<'str'
  2. 这是一个nowdoc结构
  3. str;

Arry 数组

PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的。

  1. //通过array关键字
  2. $array = array("foo" => "bar", "bar" => "foo");
  3. //使用方括号[]
  4. $arr = ["foo" => "bar", "bar" => "foo"];

key 为可选项。如果未指定,PHP 将自动使用之前用过的最大 integer 键名加上 1 作为新的键名。

仅对部分单元指定键名

  1. $array = array(
  2. "a",
  3. "b",
  4. 6 => "c",
  5. "d",
  6. );
  7. var_dump($array);

可迭代对象

Iterable是 PHP 7.1 中引入的一个伪类型。它接受任何实现了 Traversable 接口的 array 或对象。这些类型都能用 foreach 迭代,并且可以与 yield from 在一个 generator 中使用。

可迭代对象可以用作参数类型,表示函数需要一组值,但是不会关心值集的形式,因为它将与 foreach 一起使用。如果一个值不是数组或 Traversable 的实例,则会抛出一个 TypeError。

  1. function foo(iterable $iterable)
  2. {
  3. foreach ($iterable as $value) {
  4. //.
  5. }
  6. }
  7. //声明为可迭代的参数可能会使用 null 或者一个数组作为默认值
  8. function bar(iterable $iterable = [])
  9. {
  10. //....
  11. }
  12. //可迭代参数默认值

可迭代类型差异示例

  1. function gen(): iterable {
  2. yield 1;
  3. yield 2;
  4. yield 3;
  5. }

Object对象

要创建一个新的对象 object,使用 new 语句实例化一个类:

  1. class foo
  2. {
  3. function do_foo()
  4. {
  5. echo "dong foo.";
  6. }
  7. }
  8. $bar = new foo;
  9. $bar->do_foo();

如果将一个对象转换成对象,它将不会有任何变化。如果其它任何类型的值被转换成对象,将会创建一个内置类 stdClass 的实例。如果该值为 null,则新的实例为空。 array 转换成 object 将使键名成为属性名并具有相对应的值。注意:在这个例子里, 使用 PHP 7.2.0 之前的版本,数字键只能通过迭代访问。

  1. $obj = (object) array('1' => 'foo');
  2. var_dump(isset($obj->{'1'})); // PHP 7.2.0 后输出 'bool(true)',之前版本会输出 'bool(false)'
  3. var_dump(key($obj)); // PHP 7.2.0 后输出 'string(1) "1"',之前版本输出 'int(1)'

对于其他值,会包含进成员变量名 scalar。

  1. $obj = (object)'ciao';
  2. echo $obj->scalar;

Resource 资源类型

资源 resource 是一种特殊变量,保存了到外部资源的一个引用。资源是通过专门的函数来建立和使用的

NULL

特殊的 null 值表示一个变量没有值。NULL 类型唯一可能的值就是不区分大小写的常量 null。
在下列情况下一个变量被认为是 null:

  • 被赋值为 null
  • 尚未被赋值。
  • 被 unset()。
  1. $var = NULL;

Callback / Callable类型

一些函数如 call_user_func() 或 usort() 可以接受用户自定义的回调函数作为参数。回调函数不止可以是简单函数,还可以是对象的方法,包括静态类方法。

传递

PHP是将函数以string形式传递的。可以使用任何内置或用户自定义函数,但除了语言结构例如:array(),echo,empty(),eval(),exit(),isset(),list(),print 或 unset()。
一个已实例化的 object 的方法被作为 array 传递,下标 0 包含该 object,下标 1 包含方法名。在同一个类里可以访问 protected 和 private 方法。
静态类方法也可不经实例化该类的对象而传递,只要在下标 0 中包含类名而不是对象。自 PHP 5.2.3 起,也可以传递 ‘ClassName::methodName’。
除了普通的用户自定义函数外,也可传递 匿名函数 给回调参数。

类型转换的判别

PHP 在变量定义中不需要(或不支持)明确的类型定义;变量类型是根据使用该变量的上下文所决定的。也就是说,如果把一个 string 值赋给变量 $var,$var 就成了一个 string。如果又把一个integer 赋给 $var,那它就成了一个integer.

允许的强制转换有:

  • (int), (integer) - 转换为整形 integer
  • (bool), (boolean) - 转换为布尔类型 boolean
  • (float), (double), (real) - 转换为浮点型 float
  • (string) - 转换为字符串 string
  • (array) - 转换为数组 array
  • (object) - 转换为对象 object
  • (unset) - 转换为 NULL
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post