php运行原理与变量类型
程序员文章站
2022-04-17 18:47:15
...
php 运行原理
- PHP: 超文本预处理语言
- PHP: 是一种可以嵌入到 HTML 文档中的服务器端脚本语言
- PHP 也是使用标签嵌入到 HTML 文档中,和 css/js 是一样的
-
<?php
: 起始标签 -
?>
: 结束标签 - html 文档中一旦嵌入到 php 代码,那必须将扩展名由
.html
更新为.php
- 浏览器并不能直接解析 HTML 文档中的 php 代码
- 如果要解析 html 中的 php 代码,需要在 web 服务器中安装 php 解释器(php.exe)
PHP 变量
1、变量的作用
- 程序中总会有一些数据, 需要反复使用, 将它们临时保存到一个变量中
- 变量实现了数据的复用 (函数实现了代码的复用)
- 与其它语言不同之处, php 变量使用前不要声明——php 没有变量声明语句,直接赋值
- 所谓变量声明, 可以简单的理解为:向内存申请一块空间,用来存储数据, 变量名就是内存地址的编号
- 赋值:第一次要初始化, 第二次叫更新/修改
$a = 100;
标识符:命名规范:,只允许使用字母,数字和下划线,且不能以数字开头
PHP 变量三要素
- php 的变量名与普通的标识符是不一样, 必须要用
$
开头 - 必须满足 php标识符的命名规范,
字符串, 数字或下划线组成,并且不能以数字开始
-
变量名严格区分大小写(PHP 函数不区分大小写)
$username
,$userName
变量$9a
非法,不能以数字开始 -
除了用户自定义变量, 系统为了方便用户, 还预定义一些变量
- 预定义变量通常可以反映程序的状态,例如服务器变量, 请求变量, 不受作用域限制
//预定义变量
echo '脚本名称: ' . $_SERVER['SCRIPT_NAME']. '<br>';
echo '浏览器: ' . $_SERVER['HTTP_USER_AGENT']. '<br>';
echo '服务器: ' . $_SERVER['SERVER_SOFTWARE']. '<br>';
echo 'GET请求参数: ' . $_GET['id'];
echo '<hr>';
$table;
if (is_null($table)) {
echo '$table 的值 null';
}
2、变量的类型:(任何一个变量一定是属于某种数据类型)
- php 是弱类型语言, 变量的类型, 完成由它的值来确定
- 变量值的类型, 根据存储方式, 分为三类: 原始类型, 复合类型, 特殊类型
为什么变量数据有类型
(1、)操作的要求
- 只有先明确了数据的类型, 才能定允许的操作
- 例如, 数值允许进行算术运算, 字符串不能进行算术运算
100 + 30 = 130; //有意义
abc - qer //无意义
(2、)存储的要求
- 只有先明确了数据类型, 才能正确的分配内存空间来保存它
- 很明显, 数值,字符中, 布尔值,它们占用的空间肯定不一样的
基本类型
- 数值:
100, 3.14, -9.8
- 字符串:
'admin', "php.cn"
, 需要用单引号或双引号做为定界符进行封装。单引号不解析变量;双绰号解析变量
<?php
//双引号字符串中的变量
$name = '朱老师';
//单引号字符串中的变量不会被解析
echo '我是:$name'. '<br>';
//双引号字符串中的变量会被解析
echo "我是:$name". '<br>';
//{}定界符
echo "我是:${name}abc". '<br>';
//双引号中特殊字符会被解析
/*\t-制表符,四个空格
\" \" 转义
*/
echo "This\t 'is' a\t \"demo\"";
//大段字符串的输出,<<<Heredoc Heredoc; 功能相当于双引号,用于代码中有大量双引号时
//"<a href=\"www.php.cn\" id=\"abc\">xxxx</a>"
echo <<<DEREDOC
<h3 style="color: red">"PHP\t中文网"{$name}</h3>
HEREDOC;
echo <<< "HELLO"
<h3 style="color: green">"PHP\t中文网"{$name}</h3>
HELLO;
echo '<hr>';
// nowdoc: 功能与单引号创建的字符串类似
echo <<< 'NOWDOC'
<h3 style="color: green">"PHP\t中文网"{$name} 'php真香'</h3>
NOWDOC;
- 布尔型: 只有真,假二个值
true | false
,通常用在逻辑判断中
取值范围:
每种数据类型的取值范围不一样
存储方式:
- 栈: 定长的存储单元, 整数 4-8 个字节, 字符串的入口地址放进去
- 堆: 不定长的存储单元, 数组, 对象,字符串本身
复合类型
类型说明:
- 一个变量名对应一个值: 单值类型/标量类型
$name = 'peter zhu'; $gender = 'male';
- 一个变量名与多个值对应: 多值类型/复合类型: 数组/对象
将变量输出的方式:
-
echo
:回显,无返回值 -
print
:有返回值 -
print_r
: -
var_export()
:可以生成变量的 php 源代码的字符串表示 -
var_dump
:打印出变量详细信息,支持一次查询多个
<?php
$name = 'perter zhu';
$age = 30;
$isMarried = true;
//单值读取
//echo 回显,无返回值
echo '年龄:' .$age . '<br>';
echo $name .'年龄:' .$age . '<br>';
echo $name ,'年龄:' ,$age , '<br>';
echo '姓名:'.$name.'<br>';
//[]是数组
echo '姓名的第一个字母:' .$name[0].'<br>';
//推荐{}
echo '姓名的第一个字母:' .$name{0}.'<br>';
print('年龄:' .$age . '<br>');
//print 有返回值
echo print('年龄:' .$age . '<br>');
echo '<hr>';
// 第二个参数true, 不是输出, 而是返回return
echo print_r($name, true);
echo '<hr>';
// 复合数据, 数组
$data = range(1,20,2);
// 数组
$result = print_r($data, true);
// 字符串
//echo gettype($result);
//print_r($result);
echo '<pre>' . $result . '</pre>';
echo '<hr>';
echo $name . '<br>';
// var_export(): 可以生成变量的php源代码的字符串表示
var_export($name);
echo '<pre>' . var_export($data, true) . '</pre>';
//打印出变量详细信息,支持一次查询多个
var_dump($name, $age, $isMarried);
- 复合类型:可以理解来原始类型的 PLUS 版, 通常是由一个或多个原始类型的值组成
-
复合类型有二种类型: 数组和对象
-
数组
- 数组中的元素必须使用特殊的语法进行访问:变量名+键名,
$arr[2]
,$user['id']
- 如果键名是数值,称为:索引数组, 如果键名是连续的正整数, 可以省略键名
-
如果键名是字符串, 称为关联数组
-
对象
- 对象是由
new
指令,调用一个称为构造函数的一个特殊函数创建,或者实例化一个类来创建 - 对象的成员称之为属性或方法,使用变量名+成员指向符
-
$obj->table
, 或者$obj->getEmail()
特殊类型
- 所谓特殊,是指它的值比较特殊, 通常不会参与到运算中, 或者运算结果无意义
- 特殊类型有二种:
null
,resourece
资源类型 -
null
: 称为空类型, 当一个变量没有被初始化的时候,默认就是null
-
resourece
资源类型, 例如一个文件, 一张图片, 一个数据库的连接
类型转换
- 查询:
gettype($data)
- 设置:
settype($data, 'string')
, 这是永久性的 - 强制:
intval($data)
,strval($data)
, 这种转换是临时性,原始类型并不改变 - 判断:
is_int()
,is_string()
,is_array()
,is_object()
,is_null()
… - 自动: 当操作符二边的类型不一致的时候, 会触发自动转换机制