环境配置
在windows上的环境配置:可以下一个Wampserver,启动即可。注意这个软件默认是必须下载mariadb的,而且占用了3306端口,因此mysql的端口默认是3308。IDE可以使用PhpStorm,php解释器设置为wamp的安装目录下的bin/php/phpx.x.xx/php.exe.
基础
PHP语法
<!DOCTYPE html>
<html>
<body>
<h1>My first PHP page</h1>
<?php
echo "Hello World!";
?>
</body>
</html>
注释与java类似。
print echo 为输出。
注意
-
**方法名,函数名,类名,关键字,不区分大小写。**变量名区分大小写。
-
数组不只可以用array()函数来定义,也可以直接使用$arr = [1,2,3]; 和Python一样。
-
echo一个双引号包裹的东西,里面的变量名会解析为变量而不是字符串,但如果用单引号就会解析为字符串。
-
如果一个数组内既有关联元素,也有下标元素,那么只有下标元素可以通过下标访问,且下标按序从0递增,不受关联元素影响。但是关联元素也会占用一个数组的空间(数组长度+1)。
-
$a = array( null => 'a', true => 'b', false => 'c', 0 => 'd', 1 => 'e', '' => 'f' ); //这个代码中$a的长度为3, 因为键名将被这样转换:null 转为(空字符串),true 转为 1,false 转为 0。这样最后加入的d,e,f会替换前三个元素。
-
数组中的下标元素也可看做自带默认键(数字类型,即元素下标)的关联元素。$arr[0] 这种实际上就是找到键为0 的value。
变量
<?php
$x=5;
$y=6;
$z=$x+$y;
echo $z;
?>
规则:
- 变量以 $ 符号开始,后面跟着变量的名称
- 变量名必须以字母或者下划线字符开始
- 变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )
- 变量名不能包含空格
- 变量名是区分大小写的($y 和 $Y 是两个不同的变量)
作用域
-
local
- 与Python类似,函数内部为局部变量,外部为全局变量
-
global
-
全局变量在函数内访问,需要global声明
-
<?php $x=5; $y=10; function myTest() { global $x,$y; $y=$x+$y; } myTest(); echo $y; // 输出 15 ?>
-
PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。
<?php $x=5; $y=10; function myTest() { $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y']; } myTest(); echo $y; ?>
-
-
static
-
函数内声明的变量在函数结束时就删除,如果想保留,比如每次调用函数时某个变量的值都保存记录,就是要static修饰该变量。
<?php function myTest() { static $x=0; echo $x; $x++; echo PHP_EOL; // 换行符 } myTest(); myTest(); myTest(); ?>
-
-
parameter
- 与Python的参数传递一致,注意参数名为:$xxx
echo和print
echo 和 print 区别:
- echo - 可以输出一个或多个字符串
- print - 只允许输出一个字符串,返回值总为 1
**提示:**echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。
<?php
echo "<h2>PHP 很有趣!</h2>";
echo "Hello world!<br>";
echo "我要学 PHP!<br>";
echo "这是一个", "字符串,", "使用了", "多个", "参数。";
?>
<?php
$txt1="学习 PHP";
$txt2="RUNOOB.COM";
$cars=array("Volvo","BMW","Toyota");
echo $txt1;
echo "<br>";
echo "在 $txt2 学习 PHP ";
echo "<br>";
echo "我车的品牌是 {
$cars[0]}";
?>
<?php
$txt1="学习 PHP";
$txt2="RUNOOB.COM";
$cars=array("Volvo","BMW","Toyota");
print $txt1;
print "<br>";
print "在 $txt2 学习 PHP ";
print "<br>";
print "我车的品牌是 {
$cars[0]}";
?>
echo和print都可以使用或去掉括号。
数据类型
- 整型
- 字符串
- 单引号或双引号
- 浮点
- 布尔
- 数组
- 对象
- NULL
<?php
$x = 10.23;
$x = "1123";
$x = true;
$x = 1;
//数组
$x = array("a","s");
var_dump($x);//输出数据类型和值
$x = null;
//对象
class Car
{
var $color;
function __construct($color="green") {
$this->color = $color;
}
function what_color() {
return $this->color;
}
}
?>
类型比较
- 松散比较:使用两个等号 == 比较,只比较值,不比较类型。
- 严格比较:用三个等号 === 比较,除了比较值,也比较类型。
0,false,null,“”的值相同,类型不同。
“0”和false,0,的值相同,“0”和null,“”,的值不相同。
python中 is比较地址,==比较内容。
常量
设置常量使用define()函数,语法如下:
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
// 区分大小写的常量名
define("GREETING", "欢迎访问 Runoob.com");
echo GREETING; // 输出 "欢迎访问 Runoob.com"
echo '<br>';
echo greeting; // 输出 "greeting"
常量默认是全局的,函数外定义后,函数内访问无需global关键字。
字符串
唯一的字符串运算符
并置运算符,用于连接字符串。相当于python中的+
<?php
$txt1="Hello world!";
$txt2="What a nice day!";
echo $txt1 . " " . $txt2;
?>
strlen()函数
返回字符串长度(字节数,英文符号占一个字节,汉字三个字节)
数组长度用count函数。
strpos()函数
找匹配
<?php
echo strpos("Hello world!","world");
?>
运算符
加减乘除
与python一致,整除不是用 // ,而是用PHP7+版本运算符intdiv(1,3) = 3。
递加递减
++x; x++; --x; x–;与Java类似
比较
- == 值等于
- === 类型和值都等于
- !==绝对不等于(值或类型有一个不等)
逻辑
- and &&
- or ||
- xor 异或
- !x 非
数组运算符
运算符 | 名称 | 描述 |
---|---|---|
x + y | 集合 | x 和 y 的集合 |
x == y | 相等 | 如果 x 和 y 具有相同的键/值对,则返回 true |
x === y | 恒等 | 如果 x 和 y 具有相同的键/值对,且顺序相同类型相同,则返回 true |
x != y | 不相等 | 如果 x 不等于 y,则返回 true |
x <> y | 不相等 | 如果 x 不等于 y,则返回 true |
x !== y | 不恒等 | 如果 x 不等于 y,则返回 true |
组合比较符(PHP7+)
PHP7+ 支持组合比较符(combined comparison operator)也称之为太空船操作符,符号为 <=>。组合比较运算符可以轻松实现两个变量的比较,当然不仅限于数值类数据的比较。
语法格式如下:
$c = $a <=> $b;
解析如下:
- 如果 $a > b ∗ ∗ , 则 ∗ ∗ b**, 则 ** b∗∗,则∗∗c 的值为 1。
- 如果 $a == b ∗ ∗ , 则 ∗ ∗ b**, 则 ** b∗∗,则∗∗c 的值为 0。
- 如果 $a < b ∗ ∗ , 则 ∗ ∗ b**, 则 ** b∗∗,则∗∗c 的值为 -1。
if语句
if (条件)
{
if 条件成立时执行的代码;
}
elseif (条件)
{
elseif 条件成立时执行的代码;
}
else
{
条件不成立时执行的代码;
}
switch
<?php
$favcolor="red";
switch ($favcolor)
{
case "red":
echo "你喜欢的颜色是红色!";
break;
case "blue":
echo "你喜欢的颜色是蓝色!";
break;
case "green":
echo "你喜欢的颜色是绿色!";
break;
default:
echo "你喜欢的颜色不是 红, 蓝, 或绿色!";
}
?>
数组/字典
数值数组:带有数字id键
<?php
$cars=array("Volvo","BMW","Toyota");
$arrlength=count($cars);
for($x=0;$x<$arrlength;$x++)
{
echo $cars[$x];
echo "<br>";
}
?>
关联数组:相当于字典
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
//或者这样定义:
$age['Peter']="35";
$age['Ben']="37";
$age['Joe']="43";
// 输出
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
echo "Peter is " . $age['Peter'] . " years old.";
输出数组
printr($arr);
遍历关联数组:
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
foreach($age as $x=>$x_value)
{
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
?>
数组排序
- sort() - 对数组进行升序排列
- rsort() - 对数组进行降序排列
- asort() - 根据关联数组的值,对数组进行升序排列
- ksort() - 根据关联数组的键,对数组进行升序排列
- arsort() - 根据关联数组的值,对数组进行降序排列
- krsort() - 根据关联数组的键,对数组进行降序排列
$arr = array("a","c","b");
sort($arr);
超级全局变量
-
$GLOBALS
PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的关联数组(字典)中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。
-
$_SERVER
$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。
元素/代码 描述 $_SERVER[‘SCRIPT_NAME’] 包含当前脚本的路径。这在页面需要指向自己时非常有用。FILE 常量包含当前脚本(例如包含文件)的完整路径和文件名。 $_SERVER[‘PHP_SELF’] 当前执行脚本的文件名,与 document root 有关。例如,在地址为 http://example.com/test.php/foo.bar 的脚本中使用 $_SERVER[‘PHP_SELF’] 将得到 /test.php/foo.bar。FILE 常量包含当前(例如包含)文件的完整路径和文件名。 从 PHP 4.3.0 版本开始,如果 PHP 以命令行模式运行,这个变量将包含脚本名。之前的版本该变量不可用。 $_SERVER[‘SERVER_NAME’] 当前运行脚本所在的服务器的主机名。如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定。(如: www.runoob.com) $_SERVER[‘HTTP_HOST’] 当前请求头中 Host: 项的内容,如果存在的话。 $_SERVER[‘HTTP_REFERER’] 引导用户代理到当前页的前一页的地址(如果存在)。由 user agent 设置决定。并不是所有的用户代理都会设置该项,有的还提供了修改 HTTP_REFERER 的功能。简言之,该值并不可信。) -
$_REQUEST
PHP $_REQUEST 用于收集HTML表单提交的数据。
以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)。 当用户通过点击 “Submit” 按钮提交表单数据时, 表单数据将发送至标签中 action 属性中指定的脚本文件。 在这个实例中,我们指定文件来处理表单数据。如果你希望其他的PHP文件来处理该数据,你可以修改该指定的脚本文件名。 然后,我们可以使用超级全局变量 $_REQUEST 来收集表单中的 input 字段数据:
<html> <body> <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"> Name: <input type="text" name="fname"> <input type="submit"> </form> <?php $name = $_REQUEST['fname']; echo $name; ?> </body>
-
$_POST
收集表单数据,在HTML form标签的指定该属性:"method=“post”。
-
$_GET
应用于收集表单数据,在HTML form标签的指定该属性:"method=“get”。
$_GET 也可以收集URL中发送的数据。
-
$_FILES
-
$_ENV
-
$_COOKIE
-
$_SESSION
循环
-
while
-
do while
-
for
以上都与Java类似
- foreach循环:
<?php
$x=array("one","two","three");
foreach ($x as $value)
{
echo $value . "<br>";
}
?>
函数
<?php
function add($x,$y)
{
$total=$x+$y;
return $total;
}
echo "1 + 16 = "