人若有志,万事可为!(放弃了,你就是笑话一段。)
目録
1. PHP 概念
超文本预处理器 (Hypertext Preprocessor)是在服务器端执行的 脚本语言,尤其适用于Web开发并可嵌入HTML中,该语言的主要目标是允许web开发人员 快速编写动态网页。PHP 中,所有的变量都是页面级的,无论是全局变量, 还是类的静态成员,都会在页面执行完毕后被清空。
- PHP 脚本可以放在文档中的任何位置,以 <?php 开始,以 ?> 结束:
<?php
// PHP 代码
?>
- PHP在线代码测试 → 点击这里
2. PHP 变量
- 变量作用域
变量以 $ 符号开始,后面跟着变量的名称,变量名不能包含空格,区分大小写
作用域 | 说明 |
---|---|
local | 局部变量,仅能在函数内访问 |
global | 全局变量,可以在脚本中任意位置访问 |
static | 静态变量,函数执行完毕后,变量不会被删除 |
parameter | 函数参数变量,作为函数声明的一部分 |
<?php
// 在所有函数外部定义的变量,拥有全局作用域。
$name="ouseki";
$a=1;
$b=2;
// 函数参数变量
function myTest($x)
{
// 静态变量,每次调用该函数时,该变量将会保留着函数前一次被调用时的值。
static $z=99;
// 要在一个函数中访问一个全局变量,需要使用 global 关键字或者使用 $GLOBALS[index] 数组
global $a;
$a=$a+$GLOBALS['b'];
// 局部变量
$part=10;
echo $x;
echo PHP_EOL;
echo $z;
$z++;
}
myTest(5);
echo "<br>";
echo "$name<br>";
echo "$a<br>";
// 局部变量,方法运行完后自动删除,无法读取
echo "$part<br>";
myTest(5);
echo PHP_EOL;
myTest(5);
?>
................................................................
・【CONSOLE】実行結果
5 99
ouseki
3
5 100
5 101
3. PHP 输出语句
- echo(): 可以一次输出多个值,多个值之间用逗号分隔。echo是语言结构(language construct),而并不是真正的函数,因此不能作为表达式的一部分使用。
- print(): 函数print()打印一个值(它的参数),如果字符串成功显示则返回true,否则返回false。
- print_r(): 可以把字符串和数字简单地打印出来,而数组则以括起来的键和值得列表形式显示,并以Array开头。但print_r()输出布尔值和NULL的结果没有意义,因为都是打印"\n"。因此用var_dump()函数更适合调试。
- var_dump(): 判断一个变量的类型与长度,并输出变量的数值,如果变量有值输的是变量的值并回返数据类型。此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
<?php
$txt1="白羊";
$txt2="赵航";
$arrays=array("IT","God","Road");
print "$txt1<br>";
echo "$txt1-$txt2<br>";
print_r($arrays);
echo "<br>";
var_dump($arrays);
echo "<br>";
print "{$cars[0]}";
?>
................................................................
・【CONSOLE】実行結果
白羊
白羊-赵航
Array ( [0] => IT [1] => God [2] => Road )
array(3) { [0]=> string(2) "IT" [1]=> string(3) "God" [2]=> string(4) "Road" }
4. PHP 定界符
- 必须后接分号,否则编译通不过。
- EOF 可以用任意其它字符代替,只需保证结束标识与开始标识一致。
- 结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)。
- PHP 定界符 EOF 的作用就是按照原样,包括换行格式什么的,输出在其内部的东西;
- 在 PHP 定界符 EOF 中的任何特殊字符都不需要转义;
<?php
$name="变量会被解析";
$a=<<<EOF
$name<br><a>html格式会被解析</a><br/>双引号和Html格式外的其他内容都不会被解析
"双引号外所有被排列好的格式都会被保留"
"但是双引号内会保留转义符的转义效果,比如table:\t和换行:\n下一行"
EOF;
echo $a;
?>
................................................................
・【CONSOLE】実行結果
变量会被解析
html格式会被解析
双引号和Html格式外的其他内容都不会被解析 "双引号外所有被排列好的格式都会被保留" "但是双引号内会保留转义符的转义效果,比如table: 和换行: 下一行"
5. PHP 常量
- 常量在整个脚本中都可以使用。设置常量,使用 define() 函数
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
- 该函数有三个参数:
1.name:必选参数,常量名称,即标志符。
2.value:必选参数,常量的值。
3.case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。
<?php
// 区分大小写的常量名
define("ouseki", "IT God Road");
echo ouseki;
echo '<br>';
// 报错
echo Ouseki;
?>
................................................................
・【CONSOLE】実行結果
IT God Road
Warning: Use of undefined constant Ouseki - assumed 'Ouseki' (this will throw an Error in a future version of PHP) in /usercode/file.php on line 7 Ouseki
6. PHP 运算符
- 并置运算符
PHP 中只有一个字符串运算符.
用于把两个字符串值连接起来。
<?php
$txt1="Hello world!";
$txt2="What a nice day!";
echo $txt1 . $txt2;
?>
................................................................
・【CONSOLE】実行結果
Hello world!What a nice day!
- 逻辑运算符
运算符 | 名称 | 描述 |
---|---|---|
a and b | 与 | 如果 a 和 b 都为 true,则返回 true |
a or b | 或 | 如果 a 和 b 有一个为 true,则返回 true |
a xor b | 异或 | 如果 a 和 b 有且仅有一个为 true,则返回 true |
a && b | 与 | 如果 a 和 b 都为 true,则返回 true |
a || b | 或 | 如果 a 和 b 有一个为 true,则返回 true |
!a | 非 | 如果 a 不为 true,则返回 true |
- 太空舱操作符
PHP7+ 支持组合比较符(combined comparison operator)也称之为太空船操作符
$c = $a <=> $b
如果 $a > $b, 则 $c 的值为 1
如果 $a == $b, 则 $c 的值为 0
如果 $a < $b, 则 $c 的值为 -1
<?php
// 整型
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
// 浮点型
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
// 字符串
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
?>
- 运算符优先级
请参照菜鸟教程:点击这里
<?php
// 优先级: && > = > and
// 优先级: || > = > or
$a = 3;
$b = false;
// 先赋值后进行或运算
$c = $a or $b;
// 这里的 $c 为 int 值3,而不是 boolean 值 true
var_dump($c);
// 利用小括号先进行或运算,后赋值
$c = ($a or $b);
//这里的 $c 就是 boolean 值 true
var_dump($c);
// 先进行或运算,后赋值
$d = $a || $b;
//这里的 $d 就是 boolean 值 true
var_dump($d);
?>
................................................................
・【CONSOLE】実行結果
int(3)
bool(true)
bool(true)
7. PHP 数组
- 键值对数组
5.4 起,PHP可以使用短数组定义语法,用 [] 替代 array(), 还可以创建键值对数组。
<?php
$arr1 = ['value1','value2','value3'] ;
$arr2 = ['key1'=>'value1','key2'=>'value2','key3'=>'value3'];
$arrlength=count($arr1);
for($x=0;$x<$arrlength;$x++)
{
echo $arr1[$x];
echo "<br>";
}
foreach($arr2 as $x=>$x_value)
{
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
?>
................................................................
・【CONSOLE】実行結果
value1
value2
value3
Key=key1, Value=value1
Key=key2, Value=value2
Key=key3, Value=value3
8. PHP 超级全局变量
- 预定义的超级全局变量
在一个脚本的全部作用域中都可用,不需要特别说明,就可以在函数及类中使用。
超级全局变量 | 说明 |
---|---|
$GLOBALS | 包含了全部变量的全局组合数组。变量的名字就是数组的键 |
$_SERVER | 由 Web 服务器创建(可能会忽略一些),包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组 |
$_REQUEST | 用于收集HTML表单提交的数据 |
$_POST | 用于收集HTML表单提交的数据,"method=“post” |
$_GET | 用于收集HTML表单提交的数据,"method=“get” |
$_FILES | |
$_ENV | |
$_COOKIE | |
$_SESSION |
<?php
// 当前执行脚本的文件名,与 document root 有关。
echo $_SERVER['PHP_SELF'];
echo "<br>";
// 当前运行脚本所在的服务器的主机名
echo $_SERVER['SERVER_NAME'];
echo "<br>";
// 当前运行脚本所在的服务器的 IP 地址。
echo $_SERVER['SERVER_ADDR'];
echo "<br>";
// 请求开始时的时间戳。从 PHP 5.1.0 起可用。 (如:1377687496)
echo $_SERVER['REQUEST_TIME'];
echo "<br>";
// query string(查询字符串),如果有的话,通过它进行页面访问。
echo $_SERVER['QUERY_STRING'];
echo "<br>";
// 当前请求头中 Host: 项的内容,如果存在的话。
echo $_SERVER['HTTP_HOST'];
echo "<br>";
// 浏览当前页面的用户的 IP 地址。
echo $_SERVER['REMOTE_ADDR'];
echo "<br>";
// URI 用来指定要访问的页面。例如 "/index.html"。
echo $_SERVER['SCRIPT_URI'];
echo "<br>";
// 包含当前脚本的路径。这在页面需要指向自己时非常有用。
echo $_SERVER['SCRIPT_NAME'];
?>
................................................................
・【CONSOLE】実行結果
/usercode/file.php
1616404052
/usercode/file.php
9. PHP 魔术常量
- 8个魔术常量
它们的值随着它们在代码中的位置改变而改变,这些特殊的常量不区分大小写
超级全局变量 | 说明 |
---|---|
__LINE__ | 文件中的当前行号 |
__FILE__ | 文件的完整路径和文件名 |
__DIR__ | 文件所在的目录 |
__FUNCTION__ | 函数名称(PHP 4.3.0 新加) |
__CLASS__ | 类的名称(PHP 4.3.0 新加) |
__TRAIT__ | Trait 的名字(PHP 5.4.0 新加),代码复用的一个方法 |
__METHOD__ | 类的方法名(PHP 5.0.0 新加) |
__NAMESPACE__ | 当前命名空间的名称(区分大小写) |
<?php
namespace MyProject;
echo '这是第 " ' . __LINE__ . ' " 行';
echo "<br>";
echo '该文件位于 " ' . __FILE__ . ' " ';
echo "<br>";
echo '该文件位于 " ' . __DIR__ . ' " ';
echo "<br>";
class test {
function _print() {
echo '类名为:' . __CLASS__ . "<br>";
echo '函数名为(FUNCTION):' . __FUNCTION__ . "<br>";
echo '函数名为(METHOD):' . __METHOD__ ;
}
}
$t = new test();
$t->_print();
echo "<br>";
echo '命名空间为:' . __NAMESPACE__ ;
echo "<br>";
class Base {
public function sayHello() {
echo 'Hello ';
}
}
trait SayWorld {
public function sayHello() {
parent::sayHello();
echo "<br>";
echo 'Trait为:' .__TRAIT__.'<br/>';
echo 'World!';
}
}
class MyHelloWorld extends Base {
use SayWorld;
}
$o = new MyHelloWorld();
$o->sayHello();
?>
................................................................
・【CONSOLE】実行結果
这是第 " 3 " 行
该文件位于 " /usercode/file.php "
该文件位于 " /usercode "
类名为:MyProject\test
函数名为(FUNCTION):_print
函数名为(METHOD):MyProject\test::_print
命名空间为:MyProject
Hello
Trait为:MyProject\SayWorld
World!
【每日一面】
写一个遍历指定目录下所有子目录和子文件的函数
<?php
function dir_all($path) {
$handler = opendir($path);
while (false !== ($tmp = readdir($handler))) { // $tmp 第 1 次是 ".",第2次是 "..", 之后是文件名或目录名,和Linux中使用 ls 的效果一样
if(is_dir("$path/$tmp")) { // 如果是一个目录
if ($tmp == "." || $tmp == "..") // 不输出,也不递归调用
continue;
echo $tmp . "<br>"; // 输出目录名字
dir_all("$path/$tmp"); // 把当前目录名接到 $path 上,递归调用
}
else {
echo $tmp ."<br>"; // 如果是一个文件,直接输出
}
}
}
dir_all("C:\Users"); // 输出 ms 文件夹下的所有文件名、子目录名以及子目录下的文件名
?>