博客列表 >PHP 入门之一(写到哪、数据类型)

PHP 入门之一(写到哪、数据类型)

培(信仰)
培(信仰)原创
2021年03月03日 17:03:34741浏览

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
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议