php简介
PHP全称超文本预处理语言,是在服务器端执行的脚本语言,是一种简单的,面向对象的开源脚本语言PHP脚本可以让Web开发人员快速的书写动态生成的网页
PHP脚本以<?php开始,以?>结束
<?php
echo "hello world";
//这是php单行注释
/*这是
php
多行注释
*/
?>
放在在PHPstudy的WWW目录下,访问本地加PHP脚本名称执行代码
PHP 中的每个代码行都必须以分号结束。PHP 代码块的关闭标签会自带分号结束符的作用(因此在 PHP 代码块的最后一行可以不使用分号),分号是一种分隔符,用于把指令区分开来。
PHP打印
PHP中有很多种打印方式,对我来说常见的有:print,echo,printf,print_r,var_dump
echo
echo只能输出字符串、整型跟浮点型数据;不能输出布尔型,复合型,资源型数据
与print不同的是echo 可以一次性输出一个或多个数据
print 也只能输出字符串、整型跟浮点型数据;不能输出布尔型,复合型,资源型数据
并且只允许输出一个数据,返回值总为 1
-
当print打印两个数据时,就会报语法错误
-
print方法拥有返回值,且永远为1
提示:echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。
print_r
函数用于打印变量,以更容易理解的形式展示
语法:
print_r ($exp [, $return ] )
-
$exp: 要打印的变量,如果给出的是 string、int 或 float 类型变量,将打印变量值本身。如果给出的是 数组array,将会按照一定格式显示键和元素。object 与数组类似。
-
$return: 可选,如果为 true 则不输出结果,而是将结果赋值给一个变量,false 则直接输出结果。
-
看这里输出了数组变量a和字符串变量b,数组a输出之后能够很明确的看到每一个下标对应的元素,从中也可以看出,print_r跟print一样,一次也只能执行一个变量输出
-
设定参数ture之后,print_r函数是没有输出的,会将输出数据作为返回值,我们需要利用变量去接受这个返回值之后输出才回显现到屏幕上
printf
好久没看到这个了,还是学c语言的时候才用得到,printf() 函数输出格式化的字符串。
跟c语言的格式化输出一样,都是利用格式化字符对指定变量进行输出
不一样的是,可以进行多个变量的输出了
var_dump
var_dump() 函数用于输出变量的相关信息。
var_dump() 函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。如果是数组将递归展开值,通过缩进显示其结构。
PHP变量
-
PHP变量以$符号开始,后面跟着变量名称
-
变量名必须以字母或者下划线开始
-
变量名只能包含字母、数字和下划线
-
变量名是区分大小写的($y和$Y是两个不同的变量)
PHP语句和变量都是区分大小写的
创建变量
PHP没有声明变量的命令,变量在第一次赋值给它的时候被创建
当给变量赋一个文本值时,记得在文本两侧加上引号
<?php
$txt="Hello world!";
$x=5;
$y=10.5;
echo $x,$y;
?>
变量的作用域
php中变量的作用域有3个范围
-
局部变量,函数内部的变量
-
全局变量,函数外部的变量
-
超全局变量,函数内部外部都可以使用,一般以$_开头的
局部变量(在函数内部定义的变量)
例如:以下代码的num就是局部变量,其作用域仅限于函数内部,不能在函数外部使用,当我在函数外部打印变量num,会报 Undefined variable: num (未定义变量num)错误
<?php
function x(){
$num = 10;
echo $num;
}
x();
echo $num;
?>
全局变量(函数外部定义的变量)
例如:$num在函数外部定义,成为全局变量,其作用域是整个PHP文件,但在用户自定义的函数内是不可以使用的。下面的代码会报75行 Undefined variable: num,因为在函数外部定义的变量在用户自定义函数内是不能使用的
<?php
$num = 10;#全局变量
function get(){
echo $num;
}
get();#调用函数
echo $num;
?>
global关键字
在函数内部使用函数外部的变量,可以使用global 关键字用于函数内访问全局变量。
在函数内调用函数外定义的全局变量,我们需要在函数中的变量前加上 global 关键字,声明变量为全局变量:
定义全局变量后,在函数内部更改变量的值也会影响到函数外,在函数内没有声明为全局变量的变量y在更改值后不会对函数外造成影响
GLOBALS方法
PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。
所以关于相加的函数也可以写成这样
预定义变量
PHP提供了大量的预定义变量指提前系统定义的变量,可以直接拿来用(预定义变量都是以数组的形式存在的),这个定义与其他编程语言里的库函数类似
以下的部分预定义变量都是PHP中的 超全局变量 ,这意味着它们在PHP文件中的全部作用域中都可用。
-
$_GET:获取所有表单以get方式提交的数据
-
$_POST:POST提交的数据都会保存在此
-
$_REQUEST:GET和 POST提交的都会保存。
-
$_GLOBALS:由PHP中已定义所有全局变量组成的数组,变量名就是数组的索引
-
$_SERVER:服务器信息
-
$_SESSION: session 会话数据
-
$_COOKIE: cookie 会话数据
-
$_ENV:环境信息
-
$_FILES:用户上传的文件信息
在函数内和函数外都可以使用,不需要特别说明
可变变量
如果一个变量保存的值刚好是另一个变量的名字,那么可以直接通过访问一个变量得到另外一个变量的值,只需要在变量前面多加一个$符号
变量传值
将一个变量赋值给另外一个变量,称为变量传值
变量传值一共有两种方式:
值传递:
将变量保存的值复制一份,然后将值赋给另外一个变量保存(两个变量没有关系)
引用传递:
将变量保存的值所在的内存地址,传递给另外一个变量(两个变量指向同一块内存空间,是同一值)有点指针的味道
语法:
$新变量 = & $旧变量
常量
常量顾名思义是一种在程序运行过程中不可改变的量
常量的定义
在PHP中常量一般由两种定义方式:
define定义常量
语法:
define('常量名',常量值,[大小写敏感 = ture])
可选参数:指定大小写是否敏感,设定为true表示不敏感,默认为false,大小写敏感
不过在PHP8的报错信息显示:因为忽略了大小写不敏感的设定,所以舍去了define的第三个可选参数
const定义常量
语法:
const 常量名 = 常量值
特点是常量名不需要加引号了
系统常量
跟变量一样,常量也有系统帮助用户定义好的常量,可以直接拿来用
常用的几个系统常量:
-
PHP_VERSION: PHP版本号
-
PHP_INT_SIZE: 整数所占用的字节大小
-
PHP_INT_MAX:表示整数能表示的最大值( PHP中整型是允许出现负数: 带符号)
当然这些只是举了一个小例子,在PHP中也还有其他的系统常量,如在VCcode输入关键字时,在弹出的对话框中可以看到其他的数据类型也拥有系统常量值
在对话框的右侧也会拥有相关的注解,虽然是英文但不影响观感
魔术常量
在PHP中还有一些特殊的常量,他们以双下划线开始 常量名 双下划线结束,这种常量称之为系统魔术常量,魔术常量的值通常会跟随这环境变化,但是用户改变不了
-
__LINE__:表示文件中的当前行号
-
__FILE__:
当前被执行脚本在所在电脑的绝对路径(带当前文件名)
-
__DIR__
当前被执行的脚本所在电脑的绝对路径
可以看到与FILE的区别就是不会带出当前脚本的文件名
下面这些暂时没有了解到实际意义,后续补充
-
__FUNCTION__:返回函数被定义时的名字
-
__CLASS__:返回当前所属类
-
__TRAIT__:
-
__METHOD__:当前所属方法
-
__NAMESPACE__:当前所属的命名空间
数据类型
在PHP中将数据分为三大类,八小类
基本数据类型:4个小类
String(字符串)
系统根据实际长度分配,一个字符串是一串字符的序列,用引号包裹
可以将字符串放在单引号或双引号中
PHP单引号与双引号的区别
在PHP中单引号串和双引号串的处理方式是不同的,双引号里面的数据会经过编译器解释然后再当作HTML代码输出,但是单引号里面的不需要解释,总被认为是普通字符直接输出。
可以看到在单引号中,变量和特殊字符都无法被识别【除\\、\'将会被转义输出】,是直接被当做普通字符输出在网页中,在vc中也提供了颜色的不同显示,方便用户查看数据之间的区别,仔细看可以看到被转义的数据颜色要淡一点,<br>我自己理解的是因为它是HTML标签所以会被网页执行
而双引号,颜色高亮就发生了变化,变量和转义字符都被解析到,除了\'以外(因为引号不同的原因,在双引号中如果需要输出单引号不需要转义可以直接输出,单引号中同理)
至于为什么后面的\n、\r、\t都显示空白,得出一个结论在php中,\n、\r、\t这些操作符是对源码进行操作,在浏览器中没有作用;而<br>这个标签只在浏览器中起换行作用,所以在源码中会显示这个标签,但是在源码中不换行
Integer/Int(整型)
系统分配4个字节存储,表示整数类型(有前提如:不能超过最大值才为整型)
进制数的定义
默认输出的就是十进制,当不做任何转换时,会自动将定义的其他进制数转换为10进制输出
八进制:0XXX
二进制:0bXXX
十六机制:0xXXX
当我们想要输出其他进制的结果时,可以使用运算或者是PHP内置函数进行转换
提供的内置函数都是以两种进制的代表缩写来完成组合达到转换目的,可以直接拿来使用
Float/Double(浮点型)
两种表示方法为同一概念互相没有区别,系统分配8个字节存储,表示小数,或者存储整型存不下的整数
浮点型主要有两种表示方式:小数,科学计数法
我们知道PHP系统常量PHP_INT_MAX表示的是int类型的最大值,当我们将最大值+1后,利用var_dump函数查看时可以看到变成了float,以此得出结论当整型超过自身存储大小后会用浮点型存储
浮点数的判断
这里有个新概念,PHP中浮点型的数值只是一个近似值,所以要尽量避免浮点型数值之间的比较大小,因为最后的结果往往是不准确的
可以看到这里返回的类型是false,所以说浮点数值不能进行精确匹配,即使看起来一样
但是基础的还是可以比较大小的
Boolean(布尔型)
只有两个值TRUE和FALSE,通常是用于判断比较
复合数据类型:2个小类
Array(数组):一次性存放多个数据
数组是一组数据的集合,它把一系列数据组织起来,形成了一个可操作体,类似Python的列表
数组可以包含很多数据,数组中的每个数据称之为元素,一个元素包括索引和值两部分
元素的索引可以由数字和字符串组成,元素的值可以是多种数据类型
语法:
$数组名 = array('值1','值2',……)
或者按照索引创建数组
$数组名 = arry(0 => '值1',1=>'值2'……)
或
$数组名[索引] = 值
利用第一种方法直接创建,会按照创建时的顺序为索引赋给元素,索引从0开始
我们还可以使用第三种方式为已创建的数组,按照元素索引创建或修改数据
但是不知道为啥可以跨越这么长的索引值,利用索引访问也可以得到数据
Object(对象):存放对象
特殊数据类型:2个小类
NULL(空值):只有一个值就是NULL(不能运算)
Resource(资源类型):存放资源数据(PHP外部数据:如数据库、文件)
类型转换
在很多条件下需要将当前PHP取得的数据,转换成目标数据类型
在PHP中有两种类型转换方式:自动转换,强制转换
关于类型转换用的最多的就是转布尔值(判断)和转数值(运算)
其他类型转数值说明
-
布尔TRUE为1,FALSE为0
-
以字母开头的字符串转数值永远为0
-
以数字开头的字符串,取到碰到字符为止,且不会同时包含两个小数点
自动转换
系统根据需求自己判定转换
不知道为啥,字符串加字符串会报错,应该是版本或者是操作问题
但是如果是布尔值进行运算的话就会进行自动转换
强制转换
根据需要的目标类型转换,只需要在要转换的数据前添加一个要转换的类型并用括号括起来
强制类型转换就可以实现字符串与数值相加,跟规则一样:以字母开头的字符串转数值会被解析为0
以数字开头的字符串,取到碰到字符为止,且不会同时包含两个小数点
类型判断
is_类型名称(变量名)
例如:is_int() 、is_string()、is_float()这些函数用于检测变量是否为执行类型,并返回布尔值。
is_int函数返回的是布尔值,一般用作判断不能直接使用echo输出,需要使用var_dump函数进行输出
is_numeric
单独提一下这个,应为经常做题用到,作用是:检测 变量是否为数字或者由数字组成的字符串
有一个字符都会返回false
var_dump()
var_dump() 函数用于输出变量的相关信息
语法:
var_dump ( 变量名1,……,变量名n)
var_dump()函数会输出变量类型和值以及变量长度信息
gettype
函数用于获取变量的类型。得到的是该类型所对应的字符串
语法:
gettype ( 变量名)
settype
用于设定数据类型,设置成功时返回 TRUE, 失败时返回 FALSE。
语法:
settype ( 变名量,'转换的类型' )
与强制转换不同,强制转换是对输出复制的内容进行处理,不会处理实际存储的内容
settype会直接改变数据本身
单纯强制转换可以看到并不会更改原先的数据和类型
当使用settype函数后就是在原先数据的基础上直接进行类型转换
运算符
算术运算符
算数运算符有:’+、-、=、*、/、%、++、--、**(乘方)、-(负数)‘
这个其实跟c语言的一样,就不做特别介绍了,主要复习一下两个
自增自减运算符:
运算符 |
说明 |
举例 |
++ |
自增运算符 |
++$a 、$a++ |
-- |
自减运算符 |
--$a、 $a-- |
主要针对一个单独的变量来操作,自增自减运算符有两种运算方法:
-
一种是,将运算符放在后面,意味着先将变量的值增加或者减少1,然后再将值赋给变量参与运算,称为前置自增自减运算符
-
另一种是,将运算符放在后面,意味着先利用变量值参与运算后,再将变量当前值增加或减少1,称为后置自增自减运算符
($b + $a++)变量a是后置自增运算符,是先计算后赋值,所以加出来结果是12,但是计算完之后,自增运算符就要在原先的基础上加1,所以此时变量a的值为11
($b +(++ $a))变量a 又变成了前置自增运算符,是先加一赋值后再参与运算,所以在原先11的基础上再加1,得到12,12+2=14
字符串运算符
字符串运算符只有一个,即英文状态下的句号’.‘,它的作用是将两个变量连接起来,结合成一个新的字符串
赋值运算符
赋值运算符有’=、+=、-=、/=、*=、%=、.=‘
这个也跟c差不多,需要注意的只有一个:
运算符 |
说明 |
举例 |
展开形式 |
.= |
连接字符 |
$a . = $b |
$a = $a . $b |
位运算符
位运算符是指对二进制位从高到低对齐后进行计算
计算机中的数值,都是以补码的形式存在的
正数的反码补码相同,符号位为0,负数的符号位为1,补码为该数反码值加1
运算符 |
说明 |
举例 |
描述 |
& |
按位与 |
$a & $b |
按二进制位进行与运算:遇0为0 |
| |
按位或 |
$a | $b |
按二进制位进行或运算:遇1为1 |
^ |
按位异或 |
$a ^ $b |
按二进制位进行异或运算:相同为0,相异为1 |
~ |
按位取反 |
~$a |
单目,先将变量a每个二进制按位取反,最后再求补码 |
<< |
向左移位 |
$a << $b |
将变量a的二进制位全部左移b位,移出位删掉,移进位补0 |
>> |
向右移位 |
$a >> $b |
将变量a的二进制位全部右移b位,移出位删掉,移进位补0 |
逻辑运算符
运算符 |
说明 |
示例 |
结果为true的情况 |
&&或and |
逻辑与 |
$a && $b |
当变量a,b都为true时 |
||或or |
逻辑或 |
$a || $b |
当变量a为true或b为true时 |
xor |
逻辑异或 |
$a xor $b |
当变量a,b有且仅有一个为 true,则返回 true |
! |
逻辑非 |
!$a |
当变量a不为true时 |
值得注意的是:在PHP逻辑运算符中,逻辑与和逻辑或这两个运算符有4种符号,其中属于同一逻辑的两个运算符(例如&&和and)之间却有着不同的优先级
仅仅是or和||运算符发生了变化,最后输出的结果就是有所差别,这是值得注意的部分,有关运算符优先级的问题,后面会讨论
比较运算符
需要单独列出来的有
运算符 |
说明 |
举例 |
描述 |
== |
相等 |
123 == '123' |
仅比较值,只要值相等返回true |
=== |
恒等 |
$a === $b |
强类型比较,要求值和数据类型都相等才返回true |
!= |
不等 |
$a != $b |
它只会检测值,所以必须要值和类型都不等于才返回tur |
!== |
非恒等 |
$a !== $b |
会检查值和数据类型,不相等就返回true |
两种变量之间的比较,比较符的不同所对应结果也有所变化
三元运算符
这个运算符在c语言中也遇见过,它的作用是根据一个表达式在另两个表达式中选择一个
语法:
(expr1) ? (expr2) : (expr3) ;
如果expr1为真则返回expr2的结果,反之返回expr3的结果
第二类
(expr1) ? :(expr3) ;
可以理解为省略了expr2的值,以expr1代替
在 expr1 值为 TRUE 时返回 expr1的结果,否则返回 expr3的结果。
运算符的优先级
结合方向 |
运算符 |
附加信息 |
右 |
** |
乘方(算术运算符) |
不适用 |
+ -(正,负) ++ -- ~ (int) (float) (string) (array) (object) (bool) @ |
一元 + 和 -(算术), 递增/递减运算符, 按位取反运算符, 类型转换 和 错误控制 |
不适用 |
! |
逻辑非(逻辑运算符) |
左 |
* / % |
算术运算符 |
左 |
+ - |
算术运算符(二元 + 和 -) |
左 |
<< >> |
左右移位(位运算符) |
左 |
. |
字符串拼接符 |
无 |
<、<=、 >、 >= |
比较运算符 |
无 |
==、 != 、===、 !== |
比较运算符 |
左 |
& |
按位与(位运算符 和 引用) |
左 |
^ |
按位异或(位运算符) |
左 |
| |
按位或(位运算符) |
左 |
&& |
与运算(逻辑运算符) |
左 |
|| |
或运算(逻辑运算符) |
右 |
?? |
null 合并运算符 |
无关联 |
? : |
三元运算符 |
右 |
=、+=、-=、 *=、 **=、 /=、 .=、 %=、 &=、 |=、 ^=、<<=、 >>=、 ??= |
赋值运算符 |
不适用 |
|
|
左 |
and |
逻辑运算符 |
左 |
xor |
逻辑运算符 |
左 |
or |
逻辑运算符 |
::双冒号运算符
在PHP中,`::`是一个双冒号运算符,也被称为范围解析操作符或静态访问操作符。
它用于访问类中的静态属性、静态方法和常量,或调用父类的静态方法。
在类名后面使用`::`,可以直接访问类的静态成员或调用静态方法,而无需创建类的实例。这使得我们无需实例化一个类就可以访问和操作类级别的成员。
下面是一些使用`::`的示例:
1. 访问静态属性:
class MyClass {
public static $myStaticProperty = 10;
}
echo MyClass::$myStaticProperty; // 输出 10
2. 调用静态方法:
class MyClass {
public static function myStaticMethod() {
echo "Hello, world!";
}
}
MyClass::myStaticMethod(); // 输出 "Hello, world!"
3. 访问父类的静态成员或调用父类的静态方法:文章来源:https://www.toymoban.com/news/detail-426389.html
class ParentClass {
public static $myStaticProperty = 10;
}
class ChildClass extends ParentClass {
public static function myStaticMethod() {
echo self::$myStaticProperty;
}
}
ChildClass::myStaticMethod(); // 输出 10
总之,`::`操作符在PHP中用于访问静态成员或调用静态方法,它提供了一种在类级别访问和操作成员的便捷方式。文章来源地址https://www.toymoban.com/news/detail-426389.html
到了这里,关于PHP初识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!