一、简介
- PHP是在服务器端运行的脚本语言,可以快速写成动态的网页;常用的有LAMP与WAMP组合
- 静态网页与动态网页
静态网页特点:
1、每个网页内容都在服务器上,每个网页都是独立的存在;
2、容易被搜索引擎检索。相对稳定;
3.、没有数据库支持,维护难度大;
4、交互性差,功能方面限制大;
动态网页特点:
1、交互性好,会根据用户的要求进行改变;
2、自动更新;
3、不同用户访问同一网页会出现不同页面;
二、PHP语法
- php标记:
<%代码%> //ASP风格
<?PHP代码?> //简短
<script language="php" > PHP代码 </script> //脚本
<>php php代码 ?> //标准
- PHP注释:
//单行注释 <?php //代码 ?>
/* */ 多行注释 <?php /*代码*/ ?>
# 风格注释 <?php #代码 ?>
- PHP语句结束符:
结束符通常为英文的分号 " ; "
<?php
echo "hello world" ;
?>
- PHP输出
echo "啦啦啦" ;
print("啦啦啦");
print_r();//打印变量
var_dump(); //输出数据类型与长度
$admin = "lalalala";
print_r($admin);
echo '<br>';
var_dump($admin);
- 变量
变量可以改变;
变量存在名字;
变量可以储存数据;
变量可以通过名字访问数据;
变量以 $ 符号开始,后面跟着变量的名称
变量名必须以字母或者下划线字符开始
变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )
变量名不能包含空格
变量名是区分大小写的($y 和 $Y 是两个不同的变量)
【 PHP 语句和 PHP 变量都是区分大小写的】
$admin = 1;
echo "<br>";
echo $admin ;
//删除用unset()来进行销毁,isset来进行检测是否设置为null;
- PHP变量作用域
<?php
header("Content-Type:text/html;charset=utf-8"); //防止出现乱码
$x = 1 ;//全局变量
function mytest()
{
$y = 2 ; //局部变量
echo "输出内部变量";
echo "<br>";
echo "变量x为:$x";
echo "<br>";
echo "变量y为:$y";
echo "<br>";
}
mytest();
echo "输出外部变量";
echo "<br>";
echo "变量x为:$x";
echo '<br>';
echo "变量y为:$y";
//除函数外,全局变量可以被任意调用,函数不能调用,防止变量污染;
?>
<?php
$x = 1 ;
$y = 2;
function test()
{
global $x, $y;
$y = $x + $y;
}
test();
echo $y;
//添加global 来调用全局变量
?>
<?php
$x =1 ;
$y = 2;
function test1()
{
$GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y'] ;
}
test1();
echo $y;
?>
//将全局变量放入$GLOBALS['index']数组中,进行运算;也可以更新变量
<?php
function myTest()
{
static $x=0; //声明关键字,不被删除
echo $x;
$x++;
echo PHP_EOL; // 换行符
}
myTest();
myTest();
myTest(); // 0 1 2
?>
<?php
function test($x)
{
echo $x;
}
test(1);
?>
- 预定义变量(数组):
$_GET: //获取表单以get方式提交数据;
$_POST://POS提交的数据;
$_REQUEST://GET与POST的数据都会保存;
$GLOBALS:PHP中的全局变量;
$_SERVER:服务器信息;
$_SESSION:session会话数据;
$_COOKIE:cookie数据;
$_ENV:环境信息;
$_FILES:用户上传的文件信息;
- 传值与传值
//传值
<?php
$a =1 ;
$b = $a;
$b = 2;
echo $a,$b;// a==1 ;b==2
?>
//传址
<?php
$a = 1;
$b = & $a;
$b = 2;
echo $a,$b; //a==2 ; b==2
?>
- 变量定义
<?php
define('name','aa');//定义常量
define('pi',3.14,true);//true 表示不区分大小写,默认是false; 常量名默认大写
define('%-%','aa');
echo constant(%-%);//特殊字符
const NAME = 'aa';
?>
- 预定义/魔术变量
//预定义
echo PHP_VERSION,'<br>'; //版本号
echo PHP_OS,'<br>' ; //操作系统
echo PHP_INT_MAX,'<br>'; //整形的最大值
//魔术常量
echo _LINE_,'<br>'; //获取当前行号
echo _FILE_,'<br>'; //文件的完整路径 和文件名
echo _DIR_,'<br>';//文件的所在目录
echo _FUNCTION_,','<br>';//返回函数定义时的名字
echo _CLASS_,'<br>';//返回类定义时的名字
- 数据类型
<?php
$x=111;
var_dump($x);
echo '<br>';
$y= -111; //负数
var_dump($y);
echo '<br>';
$y= 010; //八进制
var_dump($y);
echo '<br>';
$y= 0x11; //十六进制
var_dump($y);
echo '<br>';
$x = 10.365; //浮点数
var_dump($x);
echo "<br>";
$name = 'aaaaa'; //字符串
echo "名字是$name",'<br>';
echo '名字是$name','<br>';
echo '毛主席说:\'数风流人物,还看今朝\'','<br>'; //特殊符号
$c=array("aaa","ddddd","qqqqqqqq");//数组
var_dump($c); //返回各个字段的数据类型与值
echo decbin(123),'<br>';//十进制转二进制
echo bindec(1111);//二进制转十进制
echo dechex(12);十进制转十六进制
//谁转谁在前,目标进制在后;
?>
- PHP EOF
$name="runoob";
$a= <<<EOF
"abc"$name
"123"
EOF;
// 结束需要独立一行且前后不能空格
echo $a;
- 必须后接分号,否则编译通不过。
- EOF 可以用任意其它字符代替,只需保证结束标识与开始标识一致。
- 结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)。
- 开始标识可以不带引号或带单双引号,不带引号与带双引号效果一致,解释内嵌的变量和转义符号,带单引号则不解释内嵌的变量和转义符号。
- 当内容需要内嵌引号(单引号或双引号)时,不需要加转义符,本身对单双引号转义,此处相当与q和qq的用法。
注意:
1.以 <<<EOF 开始标记开始,以 EOF 结束标记结束,结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号 。
2.开始标记和结束标记相同,比如常用大写的 EOT、EOD、EOF 来表示,但是不只限于那几个(也可以用:JSON、HTML等),只要保证开始标记和结束标记不在正文中出现即可。
3.位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。在 heredoc 中,变量不需要用连接符 . 或 , 来拼接
<?php
$txt1="Hello world!";
$txt2="What a nice day!";
echo $txt1 . " " . $txt2;
echo strlen($txt1);
echo strpos($txt2,'a');
?>
- 运算符
<?php
//整除 PHP7+
var_dump(intdiv(10,3));//向下取整
$a = "Hello";
$b = $a . " world!";
echo $b; // 输出Hello world!
//数组运算
$x = array("a" => "red", "b" => "green");
$y = array("c" => "blue", "d" => "yellow");
$z = $x + $y; // $x 和 $y 数组合并
var_dump($z);
var_dump($x == $y);//相同的键值对 返回true
var_dump($x === $y);//相同的键值对且类型相同 返回true
var_dump($x != $y);//不等为真
var_dump($x <> $y);//不等为真
var_dump($x !== $y);// 不等与为true
//三元运算符
$test = 'aaaa';
$username = isset($test) ? $test : 'nobody';
echo $username, PHP_EOL;
//组合比较符(<=>) PHP7+版本 不止限于数值的比较
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
?>
- 循环
<?php
$a = rand(1,99);
if($a > 85)
echo "不错哦",'<br>';
elseif ( $a >70) {
echo "加油",'<br>';
}
else
echo "挂了";
echo '<br>';
?>
<?php
$a = rand(1,9);
switch ($a) {
case '1':
echo "lalala";
break;
case '3':
echo "qqq";
break;
case '5':
echo "wwww";
break;
case '7':
echo "fsdff";
break;
default:
echo "区别";
break;
}
//如果只有case,不添加break 或 continue ,代码将会从进入点一直向下执行,知道结束
?>
for ($a = 0 ; $a < 7 ; $a++)
{
echo $a = $a +$a;
echo '<br>';
}
//0 2 6
<?php
$x=array("Google","Runoob","Taobao"); //froeach 进行数组的遍历
foreach ($x as $value)
{
echo $value . PHP_EOL;
}
?>
<?php
$y = 10;
$a = rand(1,9);
do{
$a = $y + $a ;
echo $a;
echo "<br>";
}while ( $a<7)
?>
//while---do 循环用法类似
- 数组
//数组
$car = array('奔驰','宝马' );
echo "$car[0]<br>$car[1]";
//关联数组
$age = array('啊啊' =>"12" ,'拉拉'=>'11' );
echo "aa".$age['啊啊']."岁"
//遍历关联数组
$age = array('啊啊' =>"12" ,'拉拉'=>'11','哦哦'=>'10');
foreach ($age as $x => $x_value) {
echo $x,$x_value;
echo '<br>';
}
//数组升序排列
$age = array('啊啊' ,'拉拉','哦哦');
sort($age); //rsort() --进行降序排序
print_r($age);
//根据值进行数组的升序排列
$age = array('啊啊' =>"12" ,'拉拉'=>'11','哦哦'=>'10');
asort($age); //arsort() 降序
print_r($age);
//根据键进行升序排列
$age = array('啊啊' =>"12" ,'拉拉'=>'11','哦哦'=>'10');
ksort($age); //krsort() -进行降序排列
print_r($age);
- 超级全局变量
$GLOBALS
$x = 1 ;
$y = 2 ;
function action()
{
$GLOBALS['z'] = $GLOBALS['x'] +$GLOBALS['y'] ;
}
action();
echo $z;
//在globals中的为全局变量,在任意位置可任意进行调用
$_SERVER
//_SERVER是包含了诸如头信息、路径以及脚本位置等信息
echo $_SERVER['PHP_SELF'],'<br>'; //当前执行脚本的文件名
echo $_SERVER['GATEWAY_INTERFACE'],'<br>';//服务器使用的CGL的规范版本
echo $_SERVER['SERVER_NAME'],'<br>';//当前服务器的主机名
echo $_SERVER['SERVER_ADDR'],'<br>'; //当前脚本所在的服务器的IP地址
echo $_SERVER['SERVER_SOFTWARE'],'<br>'; //服务器表示字符串,在响应请求的头信息中
echo $_SERVER['SERVER_PROTOCOL'],'<br>';//请求页面是通信协议的名称与版本
echo $_SERVER['HTTP_HOST'],'<br>'; //当前请求头的内容
echo $_SERVER['HTTP_USER_AGENT'],'<br>';
echo $_SERVER['SCRIPT_NAME'],'<br>'; //当前脚本路径
$_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[‘GATEWAY_INTERFACE’]: 服务器使用的 CGI 规范的版本;例如,“CGI/1.1”。
$_SERVER[‘SERVER_ADDR’]: 当前运行脚本所在的服务器的 IP 地址。
$_SERVER[‘SERVER_NAME’] :当前运行脚本所在的服务器的主机名。如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定。(如: www.runoob.com)
$_SERVER[‘SERVER_SOFTWARE’]: 服务器标识字符串,在响应请求时的头信息中给出。 (如:Apache/2.2.24)
$_SERVER[‘SERVER_PROTOCOL’] :请求页面时通信协议的名称和版本。例如,“HTTP/1.0”。
$_SERVER[‘REQUEST_METHOD’] :访问页面使用的请求方法;例如,“GET”, “HEAD”,“POST”,“PUT”。
$_SERVER[‘REQUEST_TIME’] : 请求开始时的时间戳。从 PHP 5.1.0 起可用。 (如:1377687496)
$_SERVER[‘QUERY_STRING’] :query string(查询字符串),如果有的话,通过它进行页面访问。
$_SERVER[‘HTTP_ACCEPT’] 当前请求头中 Accept: 项的内容,如果存在的话。
$_SERVER[‘HTTP_ACCEPT_CHARSET’] 当前请求头中 Accept-Charset: 项的内容,如果存在的话。例如:“iso-8859-1,*,utf-8”。
$_SERVER[‘HTTP_HOST’] 当前请求头中 Host: 项的内容,如果存在的话。
$_SERVER[‘HTTP_REFERER’] 引导用户代理到当前页的前一页的地址(如果存在)。由 user agent 设置决定。并不是所有的用户代理都会设置该项,有的还提供了修改 HTTP_REFERER 的功能。简言之,该值并不可信。)
$_SERVER[‘HTTPS’] 如果脚本是通过 HTTPS 协议被访问,则被设为一个非空的值。
$_SERVER[‘REMOTE_ADDR’] 浏览当前页面的用户的 IP 地址。
$_SERVER[‘REMOTE_HOST’] 浏览当前页面的用户的主机名。DNS 反向解析不依赖于用户的 REMOTE_ADDR。
$_SERVER[‘REMOTE_PORT’] 用户机器上连接到 Web 服务器所使用的端口号。
$_SERVER[‘SCRIPT_FILENAME’] 当前执行脚本的绝对路径。
$_SERVER[‘SERVER_ADMIN’] 该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。如果脚本运行在一个虚拟主机上,则该值是那个虚拟主机的值。(如:someone@runoob.com)
$_SERVER[‘SERVER_PORT’] Web 服务器使用的端口。默认值为 “80”。如果使用 SSL 安全连接,则这个值为用户设置的 HTTP 端口。
$_SERVER[‘SERVER_SIGNATURE’] 包含了服务器版本和虚拟主机名的字符串。
$_SERVER[‘PATH_TRANSLATED’] 当前脚本所在文件系统(非文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果。
$_SERVER[‘SCRIPT_NAME’] 包含当前脚本的路径。这在页面需要指向自己时非常有用。FILE 常量包含当前脚本(例如包含文件)的完整路径和文件名。
$_SERVER[‘SCRIPT_URI’] URI 用来指定要访问的页面。例如 “/index.html”。
$_REQUEST
//用于收集HTML表单中提交的数据
<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;
?>
$_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;
?>
三、PHP表单
- 获取表单信息
<?php
$uname = $_POST['uname'];
$passward = $_POST['passward'];
echo $uname;echo '<br>';
echo $passward;
<!DOCTYPE html>
<html>
<head>
<title>测试</title>
<meta charset="utf-8">
</head>
<body>
<form action="welcom.php" method="post">
名字:<input type="text" name="uname">
密码 :<input type="text" name="passward">
<input type="submit" value="提交">
</form>
</body>
</html>
- 获取下拉菜单数据
<?php
header("Content-type:text/html;charset=utf-8");
$q = isset($_GET['q'])? htmlspecialchars($_GET['q']) : '';
if($q) {
if($q =='a') {
echo '<br>http://www.a.com';
} else if($q =='GOOGLE') {
echo 'Google 搜索<br>http://www.google.com';
} else if($q =='TAOBAO') {
echo '淘宝<br>http://www.taobao.com';
}
} else {
?>
<form action="" method="get">
<select name="q">
<option value="">选择一个站点:</option>
<option value="RUNOOB">Runoob</option>
<option value="GOOGLE">Google</option>
<option value="TAOBAO">Taobao</option>
</select>
<input type="submit" value="提交">
</form>
<?php
}
?>
//
<?php
$q = isset($_POST['q'])? $_POST['q'] : '';
if(is_array($q)) {
$sites = array(
'a' => 'a: http://www.a.com',
'GOOGLE' => 'Google 搜索: http://www.google.com',
'TAOBAO' => '淘宝: http://www.taobao.com',
);
foreach($q as $val) {
// PHP_EOL 为常量,用于换行
echo $sites[$val] . PHP_EOL;
}
} else {
?>
<form action="" method="post">
<select multiple="multiple" name="q[]">
<option value="">选择一个站点:</option>
<option value="a">a</option>
<option value="GOOGLE">Google</option>
<option value="TAOBAO">Taobao</option>
</select>
<input type="submit" value="提交">
</form>
<?php
}
?>
<input type="radio" name="q" value="TAOBAO" />Taobao //单选按钮
<input type="checkbox" name="q" value="TAOBAO"> Taobao<br> //复选框
四、文件
- 文件包含
文件包含的四种类型:
1、include :生成一个警告,会继续执行代码
2、require:生成一个警告,会停止执行后续代码
3、include_once:会进行判断文件是否被包含,一个文件只被包含一次
4、require_once:同inclide_once
//下包含
##welcom.php代码
<?php
$name = 'tom';
$age = '55';
$sex = 'man';
include 'tt.php';
##tt.php代码
<?php
echo $name,$age ,$sex ;
//上包含
##welcom.php代码
<?php
$name = 'tom';
$age = '55';
$sex = 'man';
##tt.php代码
<?php
include 'welcom.php';
echo $name,$age ,$sex ;
//require、include_once
require 'welcom.php';
require 'welcom.php';
include_once 'welcom.php';//前面已经引用文件,不在引用
- 文件的基础操作
1、文件打开:fopen() :在PHP中打开文件【必须配合fclose()使用,否则文件会被锁定】
fopen(“文件路径”,“打开模式”);
打开模式:
模式 | 描述 |
---|---|
r | 只读 |
r+ | 读写 |
w | 只写 |
w+ | 读写 |
a | 追加 |
a+ | 读与追加 |
b | 二进制 |
x | 只写,如果文件按存在,返回FALSE |
x+ | 读写,如果文件按存在,返回FALSE |
【w/w+/a 文件不存在时创建文件】
2、feof():检测文件是否到达末尾
3、fgets():逐行读取文件
<?php
$file = fopen("test.txt", "r") or exit("无法打开文件!");
// 读取文件每一行,直到文件结尾
while(!feof($file))
{
echo fgets($file). "<br>";
}
fclose($file);
4、fgetc():逐字符的读取文件
5、file():一次读取整个文件
var_dump(file("test.txt"));
echo '<br>';
print_r(file("test.txt"))
6、file_get_contents():
echo file_get_contents("./test.txt");
五、面向对象
- 基础内容
1、类:定义了一个事物的抽象特点,类的定义包含了数据的形式以及对数据的操作
2、对象:类的实例
3、成员变量:在类内部,该变量的值对外不可见,但是可以通过成员函数访问,在实例化为对象后,该变量可以称为对象的属性;
4、继承:子承父类;可以在一个已存在的类的基础上来进行,把这个类定义的内容作为自己的内容,并加入新的内容
5、父类:可以被其他类继承
6、 子类:继承其他类,派生类
7、 多态:指相同的函数或方法作用于多种类型的对象上并获得不同的结果,不同的对象可以产生不同的结果
8、重载:同名不同参的函数或方法互相称之为重载函数或方法
9、抽象函数:指具有一致性的数据结构和行为的对象抽象成类,他反应了与应用有关的性质,任何类的划分都是主观的,但必须与具体的应用有关;任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。定义为抽象的类不能被实例化。被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法应该声明为受保护的或者公有的,而不能定义为私有的。
10、封装:将客体与行为绑定在一起
11、构造函数:创建对象时初始化对象,与new连用
12、析构函数 − 析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做"清理善后" 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。析构函数:【function __destruct() { print "销毁 " . $this->name . “\n”; }】
- 关键字说明:
1、类:class
2、对象:object
3、实例化:new
4、类成员:member
///
类的定义
///
<?php
class MyTest{
var $anme; //成员变量的定义
var $age;
//成员函数的定义
function my($a,$b){
echo $this->name = $a;
echo "<br>";
echo $this->age = $b;
}
}
$q = new mytest; //实体化
$q->my("aa",12); //调用函数
echo "<br>";
echo $q->name;
echo "<br>";
echo $q->age;
echo "<br>";
echo $q->age = 2000; //修改变量的值
unset($q->name); //删除name
echo $q->name;
class My{
}
$b= new My(); //创建一个名为My类的对象
$b = new My;
var_dump($b);
fro循环
///
class mytest{
function my(){
for ($i=0; $i <=5 ; $i++) {
print($i);
}
}
}
$q = new mytest;
$q->my();
///
self用法
//
#1、self可以访问本类中的静态属性和静态方法,可以访问父类的静态属性和静态方法
#2、用SELF可以不用实例化
#3、SELF是指向类本身,一般指向类中的静态变量
class mytest{
static function a(){
echo "我爱学习";
self::b();
}
static function b(){
self::a();
}
}
mytest::a();
类常量
#解释操作符 “::” :调用内部静态变量或者是类之间调用,访问类的常量必须用双冒号
//
class mytest{
const PT = 3.14;
}
echo mytest::PT;
$b = new mytest;
echo $b::PT;
/
构造函数
#构造函数是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,在创建对象的语句中与 new 运算符一起使用
class mytest{
//成员变量
var $name ;
var $url ;
//构造函数
function __construct($a,$b){
$this->name = $a ;
$this->url = $b ;
}
function setname($a){
$this->name = $a ;
}
function seturl($b){
$this->url= $b ;
}
function getname(){
echo $this->name ;
}
function geturl(){
echo $this->url ;
}
}
$q = new mytest('www.taobao.com', '淘宝');
$w = new mytest('www.google.com', 'Google 搜索');
$q->getname();
$q->geturl();
$w->getname();
封装
#public:方法或者属性在任何作用域下都可以访问到,而且是默认的,如果没有为一个属性或方法指定访问修饰符,它将是public。
#protected:本类和子类可以访问,外部对象不可以调用。在整个继承链上使用;
#private:只能在本类访问,子类与外部对象都不可能调用。经过private标记的方法或者属性可以在继承类中重新定义,每一个类只能看到它自己定义的私有方法。
///
class my{
function on(){
$this->show();
}
function off(){
}
private function show (){
var_dump("阿凯该");
}
}
$a = new my;
echo $a->on();
//当我们直接访问private的函数时,会报错,无法访问,所以不知道类中又哪些东西
///
继承【 class xx extends xxx】
#继承时,父类中的final、private 关键字无法继承
//
class my{
public $name = "aa";
private $age = 12;
private $birthday = "atsats";
function a(){
echo $this->name;
}
}
class mt extends my {
function test(){
$q = new my;
echo $q->a();
}
}
$b= new mt;
$b->test();
多态
///
class a{
function fun(){
echo "xuexi";
}
}
class b extends a{
function fun(){
echo "buxuwle";
}
}
class c extends a{
function fun(){
echo "shangbanle";
}
}
function a($num){
// $num->fun();
if ($num instanceof a) {
$num->fun();
}
}
a(new c);
//
重写
/
class father{
function fun(){
echo "皮?";
}
function work(){
echo "工作";
}
}
class son extends father{
function fun(){
echo "不皮了。。。"; //进行覆盖
}
function work(){
parent::work(); //调用父类的函数
echo "<br>";
echo "下班了!"; //添加覆盖
}
}
$a = new son;
$a->fun();
$a->work();
$b = new father;
$b->fun();
$b->work();
/
接口
#使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。
#接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。
#接口中定义的所有方法都必须是公有,这是接口的特性。
#要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接#口的名称。
///
//声明接口
interface Light
{
function show();
}
//实现接口
class BlueLight implements Light
{
function show()
{
echo '灯光是蓝色。' . '<br>';
}
}
class RedLight implements Light
{
function show()
{
echo '灯光是红色。' . '<br>';
}
}
class Demo
{
function show()
{
echo '我不是接口' . '<br>';
}
}
class User
{
function openLight(Light $obj)
{
$obj->show();
}
}
$user = new User();
$blueLight = new BlueLight();
$redLight = new RedLight();
$demo = new Demo();
$user->openLight($blueLight);//灯光是蓝色。
$user->openLight($redLight);//灯光是红色。
$user->openLight($demo);//报错,非继承自Light类
六、命名空间
- 简述
PHP 命名空间可以解决以下两类问题:
1、用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
2、为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。
命名空间就是包,用来存放项目中的类、函数、常量;通过namespace来声明命名空间
- 基础语法
定义命名空间
namespace chian ;
function a()
{
echo "1";
}l'l
namespace usa ;
function a(){
echo "2";
}
a();
echo "<br>";
\chian\a();
echo "<br>";
\usa\a();
七、PHP与MYSQLI
mysqli
///
<?php
$severname = "localhost";
$username = "root";
$password = "root";
//连接数据库
$conn = mysqli_connect($severname , $username , $password);
if (!$conn) {
echo "失败".mysqli_connect_error;echo "<br>";
}else {echo "成功";}echo "<br>";
//创建数据库
$sql = "CREATE DATABASE sis2017";
if (mysqli_query($conn,$sql)){
echo "成功";echo "<br>";
}else {echo "失败";}
echo "<br>";
//选择数据库
mysqli_select_db($conn,'sis2017');
var_dump($conn);
echo "<br>";
//创建表
$sql1 = "CREATE TABLE student (id int auto_increment primary key not NULL ,
name varchar(20),sex varchar(10),email varchar(20) ,reg_data TIMESTAMP)";
if ($conn->query($sql1) == TRUE){
echo "创建成功";echo "<br>";
}else {echo "创建失败".$conn->error;}
echo "<br>";
//插入数据
$sql2 = "insert into student(name,sex,email) values('a','man','daad@.com')";
if(mysqli_multi_query($conn ,$sql2)){
echo "输入成功";
}else {echo "输入失败";}echo "<br>";
//修改数据
$sql3 = "UPDATE student SET name = 'b',sex ='woman',email = 'bbbb@.com' WHERE id = 1 ";
if(mysqli_multi_query($conn,$sql3)){
echo "修改成功";echo "<br>";
}else {echo "修改失败";}echo "<br>";
//删除数据
$sql4 = "DELETE FROM student WHERE id = 4";
if (mysqli_query($conn,$sql4)){
echo "删除成功";echo '<br>';
}else {echo '失败';}echo "<br>";
//读取数据
$sql5 = "SELECT * FROM student ";
$result = $conn->query($sql5);
if($result->num_rows>0){
while ($row = $result->fetch_assoc()) {
echo "id:".$row["id"]." name :".$row["name"]; echo "<br>";
}
}else {echo "无";}
//关闭连接
mysqli_close($conn);
?>