PHP是Rasmus Lerdorf在1995年创建的服务器端脚本语言。
PHP是一种广泛使用的开源通用脚本语言,特别适合于Web开发,并且可以嵌入HTML中。
截至2018年10月,PHP已在80%已知服务器端语言的网站上使用。它通常用于网站上以动态生成网页内容。用例包括:
网站和Web应用程序(服务器端脚本)
命令行脚本
桌面(GUI)应用程序
通常,它以第一种形式用于动态生成网页内容。例如,如果您有一个博客网站,则可以编写一些PHP脚本来从数据库检索博客文章并显示它们。PHP脚本的其他用途包括:
处理和保存来自表单数据的用户输入
设置和使用网站cookie
限制访问您网站的某些页面
最大的社交网络平台,Facebook是使用PHP编写的
所有PHP代码仅在Web服务器上执行,而不在本地计算机上执行。例如,如果您在网站上填写表格并提交,或者单击指向用PHP编写的网页的链接,则计算机上不会运行任何实际的PHP代码。而是将表单数据或网页请求发送到Web服务器,以由PHP脚本处理。然后,Web服务器将已处理的HTML发送回给您(这就是名称中的“超文本预处理器”的来源),然后您的Web浏览器将显示结果。因此,您看不到网站的PHP代码,只能看到PHP脚本生成的结果HTML。
如下图所示:
PHP是一种解释型语言。这意味着,当您对源代码进行更改时,您可以立即测试这些更改,而无需首先将源代码编译为二进制形式。跳过编译步骤可使开发过程更快。
PHP代码包含在<?php
和?>
标记之间,然后可以嵌入到HTML中。
PHP可以与Web服务器一起安装或不安装。
在基于Debian的GNU / Linux发行版上,可以通过以下方式安装:
sudo apt install php
在Centos 6或7上,您可以通过以下方式安装:
sudo yum install php
安装后,只需在终端中执行以下操作即可运行任何PHP文件:
php file.php
您也可以安装本地主机服务器来运行PHP网站。要安装Apache Web Server:
sudo apt install apache2 libapache2-mod-php
或者您也可以通过安装PHP,MySQL和Web服务器来全部安装
XAMPP(免费和开源的跨平台Web服务器解决方案堆栈软件包)或类似的软件包,例如WAMP
由于对于大多数项目而言,为网站编写整个代码并不实际/可行,因此大多数开发人员倾向于使用框架进行Web开发。使用框架的优点是
您不必在每次创建项目时都重新发明轮子,许多细微差别已经为您照顾好了
它们通常结构合理,因此有助于分离关注点
大多数框架倾向于遵循语言的最佳实践
他们中的许多人遵循MVC(模型-视图-控制器)模式,从而将表示层与逻辑分离
PHP脚本可以放在文档中的任何位置,并且始终以开头<?php
和结尾?>
。另外,PHP语句以分号(;)结尾。
这是一个简单的脚本,该脚本使用内置echo
函数将文本“ The Best PHP Examples”输出到页面:
<!DOCTYPE html><html><body><h1>Developer News</h1><?php echo "The Best PHP Examples"; ?></body></html>
输出为:
Developer NewsThe Best PHP Examples
PHP支持多种注释方式:
单行注释:
多行注释:
<?php // This is a single-line comment # You can also make single-line comments like this?>
<?php/*This comment block spansover multiple lines*/?>
所有关键字,类和函数都不区分大小写。
在下面的示例中,所有三个echo语句均有效:
<?phpECHO "Hello!<br>";echo "Welcome to Developer News<br>";EcHo "Enjoy all of the ad-free articles<br>";?>
但是,所有变量名都区分大小写。在下面的示例中,只有第一条语句有效,并且将显示$name
变量的值。$NAME
并且$NaMe
都被视为不同的变量:
<?php$name = "Quincy";echo "Hi! My name is " . $name . "<br>";echo "Hi! My name is " . $NAME . "<br>";echo "Hi! My name is " . $NaMe . "<br>";?>
变量是在PHP程序中存储信息的主要方法。
PHP中的所有变量都以前导美元符号开头,例如$variable_name
。要分配变量,请使用=
运算符,变量名称在左侧,表达式要在右侧计算。
句法:
<?php// Assign the value "Hello!" to the variable "greeting"$greeting = "Hello!";// Assign the value 8 to the variable "month"$month = 8;// Assign the value 2019 to the variable "year"$year = 2019;?>
变量声明以开头$
,后跟变量名
变量名称只能以大写或小写字母或下划线(_
)开头
变量名称只能包含字母,数字或下划线(Az,0-9和_
)。其他特殊字符如+ - % ( ) . &
无效
变量名称区分大小写
允许的变量名称的一些示例:
$ my_variable
$ anotherVariable
$ the2ndVariable
PHP有几个特殊的关键字,尽管它们是“有效的”变量名,但不能用于您的变量。原因是该语言本身已经定义了这些变量,并且已将它们用于特殊目的。下面列出了几个示例,有关完整列表,请参见PHP文档站点。
$this
$_GET
$_POST
$_SERVER
$_FILES
变量可以存储不同类型的数据,例如:
字符串(“ Hello”)
整数(5)
浮点(也称为double)(1.0)
布尔值(1或0)
Array(array(“ I”,“ am”,“ an”,“ array”)))
目的
空值
资源资源
字符串是字符序列。它可以是引号内的任何文本(单引号或双引号):
$x = "Hello!";$y = 'Hello!';
整数数据类型是-2,147,483,648和2,147,483,647之间的非十进制数。
整数规则:
整数必须至少有一位数字
整数不能带小数点
整数可以是正数或负数
$x = 5;
浮点数或浮点数是带小数点的数字。
$x = 5.01;
布尔值表示两种可能的状态:TRUE或FALSE。在条件测试中经常使用布尔值。
$x = true;$y = false;
数组将多个值存储在一个变量中。
$colors = array("Magenta", "Yellow", "Cyan");
Null是一种特殊的数据类型,只能具有value null
。变量可以不声明任何值,也可以将其设置为清空null
。同样,如果创建变量时未分配值,则会自动分配null
。
<?php// Assign the value "Hello!" to greeting$greeting = "Hello!";// Empty the value greeting by setting it to null$greeting = null;?>
类是用于在现实世界中建模事物的数据结构,并且可以包含属性和方法。对象是类的实例,并且是打包特定于类的值和函数的便捷方法。
<?phpclass Car { function Car() { $this->model = "Tesla"; }}// create an object$Lightning = new Car();// show object propertiesecho $Lightning->model;?>
资源是一个特殊变量,其中包含对外部资源的引用。资源由特殊功能创建和使用。您可以使用get resource type()函数查看资源类型。
<?php// prints: mysql link$c = mysql_connect();echo get_resource_type($c) . "\n";// prints: stream$fp = fopen("foo", "w");echo get_resource_type($fp) . "\n";// prints: domxml document$doc = new_xmldoc("1.0");echo get_resource_type($doc->doc) . "\n";
字符串是一系列字符。这些可用于在您的应用程序中存储任何文本信息。
有很多不同的方法可以在PHP中创建字符串。
可以使用单引号创建简单的字符串。
$name = 'Joe';
要在字符串中包含单引号,请使用反斜杠将其转义。
$last_name = 'O\'Brian';
您也可以使用双引号创建字符串。
$name = "Joe";
要包含双引号,请使用反斜杠将其转义。
$quote = "Mary said, \"I want some toast,\" and then ran away.";
双引号字符串也允许转义序列。这些是特殊的代码,它们在字符串中放置通常表示不可见字符的字符。示例包括换行符\n
,制表符\t
和实际的反斜杠\\
。
您还可以将PHP变量嵌入双引号字符串中,以将其值添加到字符串中。
$name = 'Joe';$greeting = "Hello $name"; // now contains the string "Hello Joe"
该strlen()
函数返回字符串的长度。
<?phpecho strlen("Developer News"); // outputs 14?>
查找单词串的数量
的函数返回一个字符串的单词数:strwordcount()
<?phpecho str_word_count("Developer News"); // outputs 2?>
该strrev()
函数反转一个字符串:
<?phpecho strrev("Developer News"); // outputs sweN repoleveD?>
该strpos()
函数搜索字符串中的文本:
<?phpecho strpos("Developer News", "News"); // outputs 10?>
该str_replace()
函数替换字符串中的文本:
<?phpecho str_replace("freeCodeCamp", "Developer", "freeCodeCamp News"); // outputs Developer News?>
常量是PHP中的一种变量。define()
设置常量的函数采用三个参数-密钥名称,密钥的值和一个布尔值(true或false),该布尔值确定密钥名称是否区分大小写(默认情况下为false)。常数的值一旦设置就无法更改。它用于很少更改的值(例如,数据库密码或API密钥)。
重要的是要知道,与变量不同,常量始终具有全局范围,并且可以从脚本中的任何函数进行访问。
<?phpdefine("freeCodeCamp", "Learn to code and help nonprofits", false);echo freeCodeCamp;>?// Output: Learn to code and help nonprofits
同样,在创建类时,可以声明自己的常量。
class Human { const TYPE_MALE = 'm'; const TYPE_FEMALE = 'f'; const TYPE_UNKNOWN = 'u'; // When user didn't select his gender .............}
注意:如果要在Human
类中使用这些常量,可以将其引用为self::CONSTANT_NAME
。如果要在课外使用它们,则需要将它们引用为Human::CONSTANT_NAME
。
PHP包含了人们期望用编程语言找到的所有普通运算符。
单个“ =”用作赋值运算符,而两个“ ==”或三重“ ===”用于比较。
通常的“ <”和“>”也可用于比较,“ + =”可用于添加值并同时分配值。
最值得注意的是使用“。” 连接字符串,用“。=”将一个字符串附加到另一个字符串的末尾。
PHP 7.0.X的新增功能是Spaceship运算符(<=>)。当$ a小于,等于或大于$ b时,太空船运算符将返回-1、0或1。
<?phpecho 1 <=> 1; // 0echo 1 <=> 2; // -1echo 2 <=> 1; // 1
如果/ Else是一个条件语句,根据条件的真实性,将执行不同的操作。
注意:{}
仅当条件具有多个动作声明时才需要使用方括号;但是,最好将它们包括在内。
<?php if (condition) { statement1; statement2; }
注意:您可以根据需要在“ if”块中嵌套尽可能多的语句;您不限于示例中的金额。
<?php if (condition) { statement1; statement2; } else { statement3; statement4; }
注意:该else
语句是可选的。
<?php if (condition1) { statement1; statement2; } elseif (condition2) { statement3; statement4; } else { statement5; }
注意: elseif
应始终写成一个字。
<?php if (condition1) { if (condition2) { statement1; statement2; } else { statement3; statement4; } } else { if (condition3) { statement5; statement6; } else { statement7; statement8; } }
可以同时使用“或”(||),“异或”和“与”(&&)逻辑运算符使用多个条件。
例如:
<?php if (condition1 && condition2) { echo 'Both conditions are true!'; } elseif (condition 1 || condition2) { echo 'One condition is true!'; } else (condition1 xor condition2) { echo 'One condition is true, and one condition is false!'; }
注意:如果有多个条件,则将单个条件包装在括号中是一个好习惯(这可以提高可读性)。
控制结构还有另一种语法
if (condition1): statement1; else: statement5; endif;
三元运算符基本上是单行if / else语句。
假设如果用户已登录,则需要显示“ Hello(用户名)”,如果用户未登录,则需要显示“ Hello guest”。
如果/其他声明:
if($user == !NULL { $message = 'Hello '. $user; } else { $message = 'Hello guest';}
三元运算符:
$message = 'Hello '.($user == !NULL ? $user : 'Guest');
在PHP中,该Switch
语句与JavaScript Switch
语句非常相似(请参阅JavaScript切换指南进行比较和对比)。它允许在许多不同的可能条件下进行快速案例测试,代码也更具可读性。
<?php // Switch Statement Example switch ($i) { case "free": echo "i is free"; break; case "code": echo "i is code"; break; case "camp": echo "i is camp"; break; default: echo "i is freecodecamp"; break; }
该break;
语句退出开关,然后继续运行应用程序的其余代码。如果不使用该break;
语句,则最终可能会运行多种情况和语句,有时可能需要这样做,在这种情况下,您不应包含该break;
语句。
下面是这种行为的一个示例:
<?php $j = 0; switch ($i) { case '2': $j++; case '1': $j++; break; default: break; }
如果$ i = 1,则$ j的值为:
1
如果$ i = 2,则$ j的值为:
2
尽管在某些情况下可以忽略中断而不会导致失败(请参阅下文),但通常最好的做法是将其包括在内以提高可读性和安全性(请参阅下文):
<?php switch ($i) { case '1': return 1; case '2': return 2; default: break; }
<?php switch ($i) { case '1': return 1; break; case '2': return 2; break; default: break; }
<?php//initialize with a random integer within range$diceNumber = mt_rand(1, 6);//initialize$numText = "";//calling switch statement switch($diceNumber) { case 1: $numText = "One"; break; case 2: $numText = "Two"; break; case 3: case 4: // case 3 and 4 will go to this line $numText = "Three or Four"; break; case 5: $numText = "Five"; echo $numText; // break; //without specify break or return it will continue execute to next case. case 6: $numText = "Six"; echo $numText; break; default: $numText = "unknown"; } //display result echo 'Dice show number '.$numText.'.';?>
if case is 1> Dice show number One.if case is 2> Dice show number Two.if case is 3> Dice show number Three or Four.if case is 4> Dice show number Three or Four.if case is 5> FiveSixDice show number Six.if case is 6> SixDice show number Six.if none of the above> Dice show number unknown.
当需要多次重复执行任务时,可以使用循环,而不必一次又一次地添加相同的代码。
break
在循环中使用a 可以停止循环执行。
遍历代码块特定次数。
<?phpfor($index = 0; $index < 5; $index ++){ echo "Current loop counter ".$index.".\n";}?>/*Output:Current loop counter 0.Current loop counter 1.Current loop counter 2.Current loop counter 3.Current loop counter 4.*/
如果条件为真,则循环遍历代码块。
<?php$index = 10;while ($index >= 0){ echo "The index is ".$index.".\n"; $index--;}?>/*Output:The index is 10.The index is 9.The index is 8.The index is 7.The index is 6.The index is 5.The index is 4.The index is 3.The index is 2.The index is 1.The index is 0.*/
循环遍历代码块一次,如果条件为真,则继续循环。
<?php$index = 3;do{ // execute this at least 1 time echo "Index: ".$index.".\n"; $index --;}while ($index > 0);?>/*Output:Index: 3.Index: 2.Index: 1.*/
为数组中的每个值循环遍历代码块。
函数是可以在程序中重复使用的语句块。
function say_hello() { return "Hello!";}echo say_hello();
function say_hello($friend) { return "Hello " . $friend . "!";}echo say_hello('Tommy');
function makeItBIG($a_lot_of_names) { foreach($a_lot_of_names as $the_simpsons) { $BIG[] = strtoupper($the_simpsons); } return $BIG;}$a_lot_of_names = ['Homer', 'Marge', 'Bart', 'Maggy', 'Lisa'];var_dump(makeItBIG($a_lot_of_names));
数组就像常规变量一样,但是在一个有序列表中包含多个值。如果您有多个相互关联的值(例如学生姓名列表或省会城市列表),这将很有用。
在PHP中,有两种类型的数组:索引数组和关联数组。每个都有自己的用途,我们将研究如何创建这些数组。
索引数组是有序值的列表。数组中的每个值都分配有一个索引号。数组的索引始终从0
第一个值开始,然后从那里开始增加一个。
<?php$shopping_list = array("eggs", "milk", "cheese");
$shopping_list[0]
会回来"eggs"
,$shopping_list[1]
会回来"milk"
,$shopping_list[2]
会回来"cheese"
。
关联数组是通过键而不是索引号访问的值的列表。键可以是任何值,但对于数组必须是唯一的。
<?php$student_scores = array("Joe" => 83, "Frank" => "93", "Benji" => "90");
$student_scores['Joe']
将返回83
,$student_scores['Frank']
将返回93
,$student_scores['Benji']
将返回90
。
多维数组是包含其他数组的数组。这使您可以创建复杂的数据结构,从而可以对非常复杂的数据组进行建模。
<?php$students = array( array("first_name" => "Joe", "score" => 83, "last_name" => "Smith"), array("first_name" => "Frank", "score" => 92, "last_name" => "Barbson"), array("first_name" => "Benji", "score" => 90, "last_name" => "Warner") );
现在,您可以获得第一个学生的first_name
:
$students[0]['first_name']
该count()
函数用于返回数组的长度(元素数):
<?php<?php$cars = array("Volvo", "BMW", "Toyota");echo count($cars);?>
PHP提供了一些对数组进行排序的功能。此页面描述了不同的功能并包括示例。
该sort()
函数以字母/数字升序对数组的值进行排序(例如A,B,C,D,E ... 5,4,4,3,2,1 ...)
<?php$freecodecamp = array("free", "code", "camp");sort($freecodecamp);print_r($freecodecamp);
输出:
Array( [0] => camp [1] => code [2] => free)
该rsort()
功能按字母降序/数字顺序阵列的排序的值(例如Z,Y,X,W,V ... 5,4,3,2,1 ...)
<?php$freecodecamp = array("free", "code", "camp");rsort($freecodecamp);print_r($freecodecamp);
输出:
Array( [0] => free [1] => code [2] => camp)
该asort()
函数按其值按字母/数字升序对关联数组进行排序(例如A,B,C,D,E ... 5,4,4,3,2,1 ...)
<?php$freecodecamp = array("zero"=>"free", "one"=>"code", "two"=>"camp");asort($freecodecamp);print_r($freecodecamp);
输出:
Array( [two] => camp [one] => code [zero] => free)
该ksort()
函数按键对关联数组按字母/数字升序排序(例如A,B,C,D,E ... 5,4,4,3,2,1 ...)
<?php$freecodecamp = array("zero"=>"free", "one"=>"code", "two"=>"camp");ksort($freecodecamp);print_r($freecodecamp);
输出:
Array( [one] => code [two] => camp [zero] => free)
该arsort()
函数按其值的字母/数字降序对关联数组进行排序(例如Z,Y,X,W,V ... 5,4,4,3,2,1 ...)
<?php$freecodecamp = array("zero"=>"free", "one"=>"code", "two"=>"camp");arsort($freecodecamp);print_r($freecodecamp);
输出:
Array( [zero] => free [one] => code [two] => camp)
该krsort()
函数通过键以字母/数字降序对关联数组进行排序(例如Z,Y,X,W,V ... 5,4,3,2,1 ...)
<?php$freecodecamp = array("zero"=>"free", "one"=>"code", "two"=>"camp");krsort($freecodecamp);print_r($freecodecamp);
输出:
Array( [zero] => free [two] => camp [one] => code)
表单是用户输入数据或从网页中选择数据的一种方式。表单可以存储数据,也可以检索信息以供以后使用。
为了使表单能够在PHP之类的语言中工作,您需要html中的一些基本属性。在大多数情况下,PHP使用“ post”和“ get”超级全局变量从表单获取数据。
<html><body> <form method="get" action="target_proccessor.php"> <input type="search" name="search" /><br /> <input type="submit" name="submit" value="Search" /><br /> </form><body></html>
这里的'method'属性告诉表单发送表单数据的方式。然后,“ action”属性告诉将表单数据发送到哪里。现在,“名称”属性非常重要,它应该是唯一的,因为在php中,名称的值用作该输入字段的标识。
PHP具有一些功能来检查是否已满足所需的输入。这些功能是isset
,empty
和is_numeric
。
在isset
看到检查领域已定,不为空。例:
$firstName = $_GET['firstName']if(isset($firstName)){ echo "firstName field is set". "<br>";}else{ echo "The field is not set."."<br>";}
可以获取带有全局变量$ POST和$ GET的表单输入。
$_POST["firstname"] or $_GET['lastname']