在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
PHP 代表 PHP: Hypertext Preprocessor PHP 文件可包含文本、HTML、JavaScript代码和 PHP 代码 PHP 代码在服务器上执行,结果以纯 HTML 形式返回给浏览器 PHP 文件的默认文件扩展名是 ".php" PHP 基础知识总结 PHP能做什么 PHP 可以生成动态页面内容 PHP 可以创建、打开、读取、写入、关闭服务器上的文件 PHP 可以收集表单数据 PHP 可以发送和接收 cookies PHP 可以添加、删除、修改您的数据库中的数据 PHP 可以限制用户访问您的网站上的一些页面 PHP 可以加密数据 安装 如果您的服务器不支持 PHP,您必须: 安装 Web 服务器 安装 PHP 安装数据库,比如 MySQL 官方 PHP 网站(PHP.net)有 PHP 的安装说明: http://php.net/manual/en/install.php 集成开发环境推荐 WAMP:http://www.wampserver.com/ PHP基本语法 PHP 脚本可以放在文档中的任何位置。 PHP 脚本以 <?php 开始,以 ?> 结束: <!DOCTYPE html> <html> <body> <h1>我的第一个 PHP 页面</h1> <?php echo "Hello World!"; // 这是一行注释 /* 这是 多行 注释 */ ?> </body> </html> PHP 中的每个代码行都必须以分号结束 两种在浏览器输出文本的基础指令:echo 和 print。 PHP变量 变量以 $ 符号开始,后面跟着变量的名称 PHP 没有声明变量的命令。 变量在您第一次赋值给它的时候被创建: PHP 是一门弱类型语言 PHP 会根据变量的值,自动把变量转换为正确的数据类型。 在强类型的编程语言中,我们必须在使用变量前先声明(定义)变量的类型和名称。 PHP变量的作用域 PHP 有四种不同的变量作用域: local global static parameter 局部和全局作用域 在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字。 在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问: <?php $x=5; // 全局变量 function myTest() { $y=10; // 局部变量 echo "<p>测试变量在函数内部:<p>"; echo "变量 x 为: $x"; echo "<br>"; echo "变量 y 为: $y"; } myTest(); echo "<p>测试变量在函数外部:<p>"; echo "变量 x 为: $x"; echo "<br>"; echo "变量 y 为: $y"; ?> 在函数内调用函数外定义的全局变量,我们需要在函数中的变量前加上 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++; } myTest(); myTest(); myTest(); ?> 参数作用域 参数是通过调用代码将值传递给函数的局部变量。 参数是在参数列表中声明的,作为函数声明的一部分: <?php function myTest($x) { echo $x; } myTest(5); ?> PHP echo 和 print 语句 echo - 可以输出一个或多个字符串 print - 只允许输出一个字符串,返回值总为 1 提示:echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。 echo 和 print 都是一个语言结构,使用的时候可以不用加括号,也可以加上括号: echo 或 echo() print print()。 <?php echo "<h2>PHP is fun!</h2>"; echo "Hello world!<br>"; echo "I'm about to learn PHP!<br>"; echo "This", " string", " was", " made", " with multiple parameters."; print "<h2>PHP is fun!</h2>"; print "Hello world!<br>"; print "I'm about to learn PHP!"; ?> 下面的实例演示了如何使用 echo 命令输出变量和字符串: <?php $txt1="Learn PHP"; $txt2="runoob.com"; $cars=array("Volvo","BMW","Toyota"); echo $txt1; echo "<br>"; echo "Study PHP at $txt2"; //php 双引号内部可包含变量 echo "My car is a {$cars[0]}"; //用大括号 显式的指定这是变量 $txt1="Learn PHP"; $txt2="runoob.com"; $cars=array("Volvo","BMW","Toyota"); print $txt1; print "<br>"; print "Study PHP at $txt2"; print "My car is a {$cars[0]}"; ?> PHP5数据类型 String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型), Array(数组), Object(对象), NULL(空值)。 字符串 你可以将任何文本放在单引号和双引号中: <?php $x = "Hello world!"; echo $x; echo "<br>"; $x = 'Hello world!'; //单引号 包括字符串字面量 双引号包含的字符串 可包含变量 echo $x; ?> 整型 在以下实例中我们将测试不同的数字。 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); ?> 浮点型 <?php $x = 10.365; var_dump($x); echo "<br>"; $x = 2.4e3; var_dump($x); echo "<br>"; $x = 8E-5; var_dump($x); ?> 布尔型 布尔型可以是 TRUE 或 FALSE。 数组 数组可以在一个变量中存储多个值 <?php $cars=array("Volvo","BMW","Toyota"); var_dump($cars); ?> 对象 在 PHP 中,对象必须声明。 首先,你必须使用class关键字声明类对象。类是可以包含属性和方法的结构。 然后我们在类中定义数据类型,然后在实例化的类中使用数据类型: <?php class Car { var $color; function Car($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"; } } // instantiate one object $herbie = new Car("white"); // show herbie properties echo "\herbie: Properties\n"; print_vars($herbie); ?> NULL 值 NULL 值表示变量没有值。NULL 是数据类型为 NULL 的值。 <?php $x="Hello world!"; $x=null; var_dump($x); ?> 常量 常量是一个简单值的标识符。该值在脚本中不能改变。 (常量名不需要加 $ 修饰符)。 注意: 常量在整个脚本中都可以使用。 设置常量,使用 define() 函数,函数语法如下: define(string constant_name, mixed value, case_sensitive = true) 该函数有三个参数: constant_name:必选参数,常量名称,即标志符。 value:必选参数,常量的值。 case_sensitive:可选参数,指定是否大小写敏感,设定为 true 表示不敏感。 以下实例我们创建一个 区分大小写的常量, 常量值为 "Welcome to runoob.com!": <?php define("GREETING", "Welcome to runoob.com!"); echo GREETING; ?> 字符串函数和字符串连接 <?php $txt1="Hello world!"; $txt2="What a nice day!"; echo $txt1 . " " . $txt2; // 字符串连接运算符 . echo strlen("Hello world!"); //获取字符串长度 echo strpos("Hello world!","world"); //获取子串位置 //字符串中第一个字符的位置是 0 ?> 运算符 <?php //其他运算符略.. //逻辑运算符 ! && || and or xor //数组运算符 合并: + 比较:== != === !== $x = array("a" => "red", "b" => "green"); $y = array("c" => "blue", "d" => "yellow"); $z = $x + $y; // $x 和 $y 数组合并 var_dump($z); var_dump($x == $y); var_dump($x === $y); var_dump($x != $y); var_dump($x <> $y); var_dump($x !== $y); ?> 流程控制语句 同js <?php $t=date("H"); if ($t<"20") { echo "Have a good day!"; } $t=date("H"); if ($t<"20") { echo "Have a good day!"; } else { echo "Have a good night!"; } $t=date("H"); if ($t<"10") { echo "Have a good morning!"; } else if ($t<"20") { echo "Have a good day!"; } else { echo "Have a good night!"; } $favcolor="red"; switch ($favcolor) { case "red": echo "Your favorite color is red!"; break; case "blue": echo "Your favorite color is blue!"; break; case "green": echo "Your favorite color is green!"; break; default: echo "Your favorite color is neither red, blue, or green!"; } //循环 $i=1; while($i<=5) { echo "The number is " . $i . "<br>"; $i++; } $i=1; do { $i++; echo "The number is " . $i . "<br>"; } while ($i<=5); for ($i=1; $i<=5; $i++) { echo "The number is " . $i . "<br>"; } $x=array("one","two","three"); foreach ($x as $value) { echo $value . "<br>"; } ?> 数组 <?php $cars=array("Volvo","BMW","Toyota"); //数组定义 数值数组 echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . "."; //访问数组元素 //数组长度count() $cars=array("Volvo","BMW","Toyota"); echo count($cars); //count() 函数用于返回数组的长度 //遍历数值数组 $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");//定义关联数组 echo "Peter is " . $age['Peter'] . " years old."; //遍历关联数组 $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43"); foreach($age as $x=>$x_value) { echo "Key=" . $x . ", Value=" . $x_value; echo "<br>"; } ?> 数组排序 PHP - 数组排序函数 sort() - 对数组进行升序排列 rsort() - 对数组进行降序排列 asort() - 根据关联数组的值,对数组进行升序排列 ksort() - 根据关联数组的键,对数组进行升序排列 arsort() - 根据关联数组的值,对数组进行降序排列 krsort() - 根据关联数组的键,对数组进行降序排列 //sort() $cars=array("Volvo","BMW","Toyota"); sort($cars); $clength=count($cars); for($x=0;$x<$clength;$x++) { echo $cars[$x]; echo "<br>"; } //rsort() $cars=array("Volvo","BMW","Toyota"); rsort($cars); //asort() arsort() 关联数组排序 value $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43"); asort($age); arsort($age); //ksort() krsort() 关联数组排序 key $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43"); ksort($age); krsort($age); ?> 超级全局变量 PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 $GLOBALS $_SERVER $_REQUEST $_POST $_GET $_COOKIE $_FILES $_ENV $_SESSION $GLOBAL 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。 <?php $x = 75; $y = 25; function addition() { $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; } addition(); echo $z; ?> $_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目; <?php echo $_SERVER['PHP_SELF']; // /try/demo_source/demo_global_server.php echo "<br>"; echo $_SERVER['SERVER_NAME']; // runoob.com echo "<br>"; echo $_SERVER['HTTP_HOST']; // www.runoob.com echo "<br>"; echo $_SERVER['HTTP_REFERER']; //来由 echo "<br>"; echo $_SERVER['HTTP_USER_AGENT']; //浏览器 echo "<br>"; echo $_SERVER['SCRIPT_NAME']; // /try/demo_source/demo_global_server.php //另外$_SERVER对象还包括 SERVER_ADDR, SERVER_PROTOCOL ,REQUEST_METHOD..等属性 ?> $_REQUEST 用于收集HTML表单提交的数据。 <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> </html> $_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="post" <html> <body> <!--页面post给自己--> <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"> Name: <input type="text" name="fname"> <input type="submit"> </form> <?php $name = $_POST['fname']; echo $name; ?> </body> </html> $_GET 同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="get"。 $_GET 也可以收集URL中发送的数据。 <html> <body> <a href="test_get.php?subject=PHP&web=runoob.com">Test $GET</a> </body> </html> //test_get.php <html> <body> <?php echo "Study " . $_GET['subject'] . " at " . $_GET['web']; ?> </body> </html> PHP 函数 PHP 的真正威力源自于它的函数。 在 PHP 中,提供了超过 1000 个内建的函数。 <html> <body> <?php function writeName() { echo "Kai Jim Refsnes"; } echo "My name is "; writeName(); //函数传参 function writeName($fname,$punctuation) { echo $fname . " Refsnes" . $punctuation . "<br>"; } echo "My name is "; writeName("Kai Jim","."); echo "My sister's name is "; //函数返回值 function add($x,$y) { $total=$x+$y; return $total; } echo "1 + 16 = " . add(1,16); ?> </body> </html> 魔术变量 有八个魔术常量它们的值随着它们在代码中的位置改变而改变。 _LINE__ 文件中的当前行号。 FILE 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。 DIR 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。 FUNCTION 函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。 <?php function test() { echo '函数名为:' . __FUNCTION__ ; } test(); ?> CLASS 类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。 在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 CLASS 对 trait 也起作用。当用在 trait 方法中时,CLASS 是调用 trait 方法的类的名字。 <?php class test { function _print() { echo '类名为:' . __CLASS__ . "<br>"; echo '函数名为:' . __FUNCTION__ ; } } $t = new test(); $t->_print(); ?> TRAIT Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。 Trait 名包括其被声明的作用区域(例如 Foo\Bar)。 从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。 <?php class Base { public function sayHello() { echo 'Hello '; } } trait SayWorld { public function sayHello() { parent::sayHello(); echo 'World!'; } } class MyHelloWorld extends Base { use SayWorld; } $o = new MyHelloWorld(); $o->sayHello(); ?> METHOD 类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写) <?php function test() { echo '函数名为:' . __METHOD__ ; } test(); ?> NAMESPACE 当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。 <?php namespace MyProject; echo '命名空间为:"', __NAMESPACE__, '"'; // 输出 "MyProject" ?> 命名空间 PHP 命名空间(namespace)是在PHP 5.3中加入的,如果你学过C#和Java,那命名空间就不算什么新事物。 不过在PHP当中还是有着相当重要的意义。 PHP 命名空间可以解决以下两类问题: 用户代码与PHP内部的类/函数/常量之间的名字冲突。 创建别名(或简短)的名称,提高源代码的可读性。 默认情况下,所有常量、类和函数名都放在全局空间下,就和PHP支持命名空间之前一样。 如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间 < ?php // 定义代码在 'MyProject' 命名空间中 namespace MyProject; // ... 代码 ... //也可以在同一个文件中定义不同的命名空间代码 namespace MyProject1; // MyProject1 命名空间中的PHP代码 namespace MyProject2; // MyProject2 命名空间中的PHP代码 // 另一种语法 namespace MyProject3 { // MyProject3 命名空间中的PHP代码 } ?> 在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 declare 语句。所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前。 <?php declare(encoding='UTF-8'); //定义多个命名空间和不包含在命名空间中的代码 namespace MyProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } } namespace { // 全局代码 session_start(); $a = MyProject\connect(); echo MyProject\Connection::start(); } ?> 以下代码会出现语法错误: <html> <?php namespace MyProject; // 命名空间前出现了“<html>” 会致命错误 - 命名空间必须是程序脚本的第一条语句 ?> 子命名空间 <?php namespace MyProject\Sub\Level; //声明分层次的单个命名空间 //创建了常量 MyProject\Sub\Level\CONNECT_OK, //类 MyProject\Sub\Level\Connection //和函数 MyProject\Sub\Level\Connect。 const CONNECT_OK = 1; class Connection { /* ... */ } function Connect() { /* ... */ } ?> 命名空间使用 PHP 命名空间中的类名可以通过三种方式引用: 非限定名称,或不包含前缀的类名称,例如 $a=new foo(); 或 foo::staticmethod();。如果当前命名空间是 currentnamespace,foo 将被解析为 currentnamespace\foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,则 foo 会被解析为foo。 警告:如果命名空间中的函数或常量未定义,则该非限定的函数名称或常量名称会被解析为全局函数名称或常量名称。~~无命名空间前缀的引用,默认在当前命名空间查找,然后到全局命名空间找 限定名称,或包含前缀的名称,例如 $a = new subnamespace\foo(); 或 subnamespace\foo::staticmethod();。如果当前的命名空间是 currentnamespace,则 foo 会被解析为 currentnamespace\subnamespace\foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,foo 会被解析为subnamespace\foo。 ~~带相对命名空间前缀的(类似相对路径)引用,自动在开头添加调用代码所处的命名空间 完全限定名称,或包含了全局前缀操作符的名称,例如, $a = new \currentnamespace\foo(); 或 \currentnamespace\foo::staticmethod();。在这种情况下,foo 总是被解析为代码中的文字名(literal name)currentnamespace\foo。~~带绝对命名空间前缀的引用(类似绝对路径) 引用路径已明确 不用查找 file1.php <?php namespace Foo\Bar\subnamespace; const FOO = 1; function foo() {} class foo { static function staticmethod() {} } ?> file2.php <?php namespace Foo\Bar; include 'file1.php'; const FOO = 2; function foo() {} class 全部评论
专题导读
热门推荐
热门话题
阅读排行榜
|
请发表评论