PHP---基础
一\简述
PHP可以内嵌在Html文档中的任何位置。
PHP 脚本以<?php
开头,以 ?>
结尾。
例子:
<!DOCTYPE html> <html> <body> <h1>我的第一张 PHP 页面</h1> <?php echo 'Hello World!'; // 输出 Hello World! ?> </body> </html>
php的注释:// 单行 /*多行*/ # 单行
<?php echo 'This is a test'; // This is a one-line c++ style comment /* This is a multi line comment yet another line of comment */ echo 'This is yet another test'; echo 'One Final Test'; # This is a one-line shell-style comment ?>
PHP只有变量大小写敏感。
所有用户定义的函数、类和关键词(例如 if、else、echo 等等)都对大小写不敏感。
PHP变量以$符号开头。
PHP是弱类型语言,无需声明类型。
PHP变量名称大小写敏感。
PHP 变量规则:
- 变量以 $ 符号开始,后面跟着变量的名称
- 变量名必须以字母或者下划线字符开始
- 变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )
- 变量名不能包含空格
- 变量名是区分大小写的($y 和 $Y 是两个不同的变量)
<?php
$txt="Hello world!";
$x=5;
$y=10.5;
?>
变量的作用域是脚本中变量可被引用/使用的部分。
PHP 有四种不同的变量作用域:
- local
- global
- static
- parameter
函数之外声明的变量拥有 Global 作用域,只能在函数以外进行访问。
函数内部声明的变量拥有 LOCAL 作用域,只能在函数内部进行访问。
<?php $x=5; // 全局作用域 function myTest() { $y=10; // 局部作用域 echo "<p>测试函数内部的变量:</p>"; echo "变量 x 是:$x"; // 输出 变量x是: echo "<br>"; echo "变量 y 是:$y"; // 输出 变量y是:10 } myTest(); echo "<p>测试函数之外的变量:</p>"; echo "变量 x 是:$x"; // 输出 变量x是:5 echo "<br>"; echo "变量 y 是:$y"; // 输出 变量y是: ?>
运行结果
函数内访问Global变量使用global
关键字
<?php $x=5; $y=10; function myTest() { global $x,$y; $y=$x+$y; } myTest(); echo $y; // 输出 15 ?>
使用$GLOBALS超全局变量访问全局变量
<?php $x=5; $y=10; function myTest() { $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y']; } myTest(); echo $y; // 输出 15 ?>
当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。
要做到这一点,请在您第一次声明变量时使用 static 关键字:有点像JavaScript的闭包
<?php function myTest() { static $x=0; echo $x; $x++; echo PHP_EOL; // 换行符 } myTest(); // 0 myTest(); // 1 myTest(); // 2 ?>
PHP定义常量:
常量是一个固定值的标识符。
有效的常量名以字符或下划线开头(常量名称前面没有 $ 符号)。
常量默认是大小写敏感的。
通常,常量全部使用大写字母。
与变量不同,常量贯穿整个脚本是自动全局的。
使用 define() 函数设置常量:
-
首个参数定义常量的名称
-
第二个参数定义常量的值
-
可选的第三个参数规定常量名是否对大小写敏感。默认是 false,大小写敏感。
<?php define("FOO","something"); echo FOO; ?>
PHP 中,有两种基本的输出方法:echo 和 print
echo - 能够输出一个以上的字符串 echo 是一个语言结构,有无括号均可使用:echo 或 echo()
print - 只能输出一个字符串,并始终返回 1 print 也是语言结构,有无括号均可使用:print 或 print()
echo 比 print 稍快,因为它不返回任何值
二\数据类型
String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型), Array(数组), Object(对象), NULL(空值)。
1、字符串 string
双引号和单引号的区别:双引号会解析里面的变量和转义字符,而单引号不会,单引号里的字符仅仅只有\(反斜杠)和'(单引号本身)需要转义:
<?php $str = 'Hello'; echo 'I\'ll say $str \n'; // I'll say $str\n echo "I\'ll say $str \n"; // I'll say Hello ?>
需要表示特别长的字符串的时候,可以使用heredoc和nowdoc语法,heredoc和nowdoc语法的区别相当于双引号和单引号的区别。
<? /*heredoc 语法 1. 由<<<标记名......标记名包围组成 2. 开始标记和结束标记名称要一致 3. 结束标记必须顶格写 4. 主体部分,会自动解析变量和转义字符 5. 但是函数、操作符和引号则不会被解析 */ $str = 'hello world'; echo <<<HTML <html> <head> <title>Hello World</title> </head> <body> <p>$str</p> </body> </html> HTML; ?>
<?php /*nowdoc 语法 1. 区别就是开始标记名要加单引号,但结束标记名不要加单引号 2. 主体部分的变量和转义字符不会被解析 */ echo <<<'HTML' <html> <head> <title>Hello World</title> </head> <body> <p>hello world</p> </body> </html> HTML; ?>
heredoc和nowdoc特别适合输出很长的HTML文档,比直接以字符串的形式输出要容易阅读得多。
2、整型Integer
整数是一个没有小数的数字。
整数规则:
- 整数必须至少有一个数字 (0-9)
- 整数不能包含逗号或空格
- 整数是没有小数点的
- 整数可以是正数或负数
- 整型可以用三种格式来指定:十进制, 十六进制( 以 0x 为前缀)或八进制(前缀为 0)。
PHP var_dump() 函数返回变量的数据类型和值:
<?php $x = 5985; var_dump($x); echo "<br>"; $x = -345; // 负数 var_dump($x); echo "<br>"; $x = 0x8C; // 十六进制数 var_dump($x); echo "<br>"; $x = 047; // 八进制数 var_dump($x); ?>
运行结果:
3、浮点类型
浮点数是带小数部分的数字,或是指数形式。
<?php $x = 10.365; var_dump($x); echo "<br>"; $x = 2.4e3; var_dump($x); echo "<br>"; $x = 8E-5; var_dump($x); ?>
运行结果:
4、布尔类型
布尔型可以是 true 或 false。用于判断条件
$x=true; $y=false;
5、数组:
数组可以在一个变量中存储多个值。
<?php $cars=array("Volvo","BMW","Toyota"); var_dump($cars); ?>
PHP数组其实一组键值对(key/value)。
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
或者
$age['Peter']="35"; $age['Ben']="37"; $age['Joe']="43";
也可以不指定键值(key),那么默认的索引就是从0开始的有序数字:
$cars=array("Volvo","BMW","SAAB",6=>"Audi","Daewoo");
相当于
$cars[0]="Volvo"; $cars[1]="BMW"; $cars[2]="SAAB"; $cars[6]="Audi"; $cars[7]="Daewoo";
6、php对象:
<?php class Car { var $color; // 构造器 function __construct($color="green") { $this->color = $color; } function what_color() { return $this->color; } } function print_vars($obj) { foreach (get_object_vars($obj) as $prop => $val) { echo "\t$prop = $val\n"; } } // 实例一个对象 $herbie = new Car("white");
// 执行函数 print_vars($herbie); ?>
运行结果:
7、null值
NULL 值表示变量没有值。NULL 是数据类型为 NULL 的值。
NULL 值指明一个变量是否为空值。 同样可用于数据空值和NULL值的区别。
可以通过设置变量值为 NULL 来清空变量数据:
<?php $x="Hello world!"; $x=null; var_dump($x); ?>
二\PHP语法
1、运算符+、-、*、/、%、.
<?php $num_a = 5; $num_b = 20; echo $num_a + $num_b; // 求和 echo "<br/>"; echo $num_b - $num_a; // 求差 echo "<br/>"; echo $num_b * $num_a; // 相乘 echo "<br/>"; echo $num_b / $num_a; // 求商 echo "<br/>"; echo $num_b % $num_a; // 求余 echo "<br/>"; echo $num_a.$num_b; // 字符串连接 echo "<br/>"; ?>
运行结果:
递加递减:
++ x 预递增 x 加 1,然后返回 x
x ++ 后递增 返回 x,然后 x 加 1
-- x 预递减 x 减 1,然后返回 x
x -- 后递减 返回 x,然后 x 减 1
2、比较运算符
== 是相等,值相等类型可以不同,比如'1'==1,为真。
===是全等,不仅值相等,类型也要相同,比如'1'===1,为假。
!=和<>都是不等于。
!==不全等,类型不同就是不全等。
PHP7加入的运算符:组合比较符
a<=>b,a小于b时,等于-1,
a<=>b, 等于b时,等于0,
a<=>b, a大于b时, 大于1
列子:
// Integers echo 1 <=> 1; // 0 echo 1 <=> 2; // -1 echo 2 <=> 1; // 1 // Floats echo 1.5 <=> 1.5; // 0 echo 1.5 <=> 2.5; // -1 echo 2.5 <=> 1.5; // 1 // Strings echo "a" <=> "a"; // 0 echo "a" <=> "b"; // -1 echo "b" <=> "a"; // 1 echo "a" <=> "aa"; // -1 echo "zz" <=> "aa"; // 1 // Arrays echo [] <=> []; // 0 echo [1, 2, 3] <=> [1, 2, 3]; // 0 echo [1, 2, 3] <=> []; // 1 echo [1, 2, 3] <=> [1, 2, 1]; // 1 echo [1, 2, 3] <=> [1, 2, 4]; // -1 // Objects $a = (object) ["a" => "b"]; $b = (object) ["a" => "b"]; echo $a <=> $b; // 0 $a = (object) ["a" => "b"]; $b = (object) ["a" => "c"]; echo $a <=> $b; // -1 $a = (object) ["a" => "c"]; $b = (object) ["a" => "b"]; echo $a <=> $b; // 1 // only values are compared $a = (object) ["a" => "b"]; $b = (object) ["b" => "b"]; echo $a <=> $b; // 1 ?>
3\逻辑运算符
x and y x && y 与 如果都为true,则返回true
x or y x || y 或 如果x或y有一个是真的, 则返回true
!( x == y ) 非 如果x==y为true,则返回false
x xor y 异或 如果 x 和 y 有且仅有一个为 true,则返回 true
例子:
<?php $x = true; $y = false; echo ($x and $y); // 假 echo "<br/>"; echo ($x && $y); // 假 echo "<br/>"; echo ($x or $y); // 真 echo "<br/>"; echo ($x || $y); // 真 echo "<br/>"; echo !($x == $x); // 假 echo "<br/>"; echo ($x xor $y); // 真 ?>
4\三元运算符
(expr1) ? (expr2) : (expr3)
expr1 结果为真,执行 expr2, 结果为假 执行 expr3
<?php $x = 1; $y = 2; $z = ($x > $y) ? 100 : 0; // 如果x大于y 那么z = 100 否则 z = 0 echo $z; ?>
输出0;
5\流程控制
for循环:
<?php for ($a = 5; $a > 1; $a--) { echo "This is for"; echo "<br/>"; } ?>
while循环
do while循环
<?php $a = 5; //先判断$a是否大于5,如果大于5则执行。 while($a > 1){ echo "This is while."; echo "<br/>"; $a--; } do //先执行do之内的语句,然后进行判断。至少执行一次 { echo "This is do…while."; $a--; echo "<br/>"; } while ($a > 1); ?>
switch开关
<?php $a = 9; switch($a) { case $a == 10; echo "满意"; break; case $a < 10 && $a >= 8; echo "好"; break; case $a < 5; echo "差"; break; } ?>
if else 条件语句
<?php $a = 9; if ($a == 10) { echo "满意"; } else { echo "不满意"; } echo "<br>"; if($a >= 8) { echo "满意"; } elseif($a < 8 && $a >5) { echo "一般"; } else { echo "差"; } ?>
PHP中主要有三种转移控制语句:break、continue和return。
break语句用于结束当前循环,break可以接受一个可选的数字参数来决定跳出几重循环。
Continue用于跳出本次循环,与break不同的是,continue跳出后将继续执行下一次循环。
Return语句 Return语句用于结束一个函数或者一个脚本文件。如果在一个函数中调用return语句将立即结束这个函数的执行,并将它的值作为参数返回。
6\函数
和弱类型语言JavaScript语法差不多,以function关键字开头,执行可以在定义的前面:
function function_name(){ // TODO: }
参数可以有默认值
function setHeight($minheight=50) { echo "The height is : $minheight "; } setHeight(350); setHeight(); // 将使用默认值 50 setHeight(135); setHeight(80); ?>
如需让函数返回一个值,请使用 return 语句。
<?php function add($x,$y) { $total=$x+$y; return $total; } echo "1 + 16 = " . add(1,16); ?>
7\面向对象
PHP 定义类通常语法格式如下:
<?php class phpClass { var $var1; var $var2 = "constant string"; function myfunc ($arg1, $arg2) { [..] } [..] } ?>
类使用 class 关键字后加上类名定义。
类名后的一对大括号({})内可以定义变量和方法。
类的变量使用 var 来声明, 变量也可以初始化值。
函数定义类似 PHP 函数的定义,但函数只能通过该类及其实例化的对象访问。
构造函数是名为__construct的函数,它有两个下划线。
析构函数是名为__destruct的函数,它有两个下划线。
默认访问权限是public。
public 公用的,类外部\子类都可以使用
protected 受保护的,子类可以使用,类外部不能使用
private 私有的,只有当前类可以说使用
使用->访问类的成员。
parent关键字表示父类。
final关键字表示该函数不能重载。
static修饰的方法和属性可以不实例化就访问。
abstract关键字修饰抽象类,抽象类不能实例化。
extends 继承关键字
/** * Define MyClass */ class MyClass { // 声明一个公有的构造函数 public function __construct() { } // 声明一个公有的方法 public function MyPublic() { } // 声明一个受保护的方法 protected function MyProtected() { } // 声明一个私有的方法 private function MyPrivate() { } // 此方法为公有 function Foo() { $this->MyPublic(); $this->MyProtected(); $this->MyPrivate(); } } $myclass = new MyClass; $myclass->MyPublic(); // 这行能被正常执行 $myclass->MyProtected(); // 这行会产生一个致命错误 $myclass->MyPrivate(); // 这行会产生一个致命错误 $myclass->Foo(); // 公有,受保护,私有都可以执行
/** * Define MyClass2 */ class MyClass2 extends MyClass { // 此方法为公有 function Foo2() { $this->MyPublic(); $this->MyProtected(); $this->MyPrivate(); // 这行会产生一个致命错误 } } $myclass2 = new MyClass2; $myclass2->MyPublic(); // 这行能被正常执行 $myclass2->Foo2(); // 公有的和受保护的都可执行,但私有的不行 class Bar { public function test() { $this->testPrivate(); $this->testPublic(); } public function testPublic() { echo "Bar::testPublic\n"; } private function testPrivate() { echo "Bar::testPrivate\n"; } } class Foo extends Bar { public function testPublic() { echo "Foo::testPublic\n"; } private function testPrivate() { echo "Foo::testPrivate\n"; } } $myFoo = new foo(); $myFoo->test(); // Bar::testPrivate // Foo::testPublic
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App