简介

  • PHP是一种通用开源脚本语言,服务器端脚本语言
  • PHP (Hypertext Preprocessor) 超文本预处理器
  • PHP脚本在服务器上执行

PHP文件是什么

  • PHP可包含文本、HTML、JavaScript和PHP代码
  • PHP代码在服务器上执行,结果以纯HTML形式返回浏览器
  • PHP文件的默认文件扩展名是:.php

PHP能做什么

  • 生成动态页面内容
  • 创建、打开、读取、写入、关闭服务器上的文件
  • 收集表单数据
  • 发送和接收cookie
  • 添加、删除、修改数据库中的数据
  • 限制用户访问网站上的个别页面
  • 加密数据
  • 通过PHP,不在仅限于输出HTML,可以输出图像、PDF文件,甚至flash电影
  • 输出任意的文件,如:XHTML、XML

为什么选择PHP

  • 可在不同的平台上运行(Windows、Linux、Mac OS等)
  • 与目前几乎所有的正在被使用的服务器相兼容(Apache、IIS等)
  • 提供广泛的数据库支持
  • 免费
  • 易于学习,可高效地运行在服务器端

基本语法

  • PHP脚本可以放在文档中的任何位置
  • PHP脚本以<?php 开始, 结束 ?>;
  • PHP中的每一行代码都必须以分号结束
  • 分号是一种分隔符,用于把指令集区分开
  • 两种在浏览器输出文本的基础指令:echo和print
<?phpprint "hello PHP";echo "hello world";
?>

注释

  • 单行注释: //
  • 多行注释:/* 注释内容 */

变量

  • 变量是用来存储信息的“容器”
  • 变量以$ 符号开始,后面跟着变量的名称
  • 变量名必须以字母、数字、下划线组成,数字不开头
  • 变量名区分大小写

注意:PHP语句和PHP变量都是区分大小写的

创建变量

  • PHP是一门弱类型语言
  • 创建变量时,不必向PHP声明该变量的数据类型
  • PHP会根据变量的值,自动把变量转化为正确的数据类型
<?php$txt = "Hello PHP!";$x = 10;$y = 5.5;$r = $x + $y;echo $txt,$r;
?>

运行截图

变量作用域

  • 变量的作用域是脚本中变量可被引用/使用的部分
  • 在PHP中 有四种不同的变量作用域:
    local
    global
    static
    parameter

局部和全局作用域

  • 在所有函数外部定义的变量,拥有全局作用域
  • 除函数外,全局变量可以被脚本中的任何部分访问
  • 在PHP函数内部声明的变量是局部变量,仅能在函数内部访问
  • 要在函数中访问一个全局变量,需要使用global关键字
<?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关键字

  • global关键字用于函数内访问全局变量
  • 在函数内调用函数外定义的全局变量,则需要在函数中的变量前加上 global 关键字
<?php$a = 10;$b = 20;$c = 30;function Text(){global $a,$b;echo $a;echo "<br>";echo $b;echo "<br>";echo $c;}text()
?>

运行截图

Static 作用域

  • 当一个函数完成时,它的所有变量通常都会被删除
  • 然而,有时希望某个局部变量不要被删除,则需要在第一次声明变量时使用static关键字
  • 注意:该变量仍然是函数的局部变量
<?phpfunction test(){static $x = 1;$y = 1;echo $x;echo "<br>";echo $y;$x++;$y++;echo "<hr>";}test();test();test();test();
?>

运行截图

参数作用域

  • 参数是通过调用代码 将值传递给函数的局部变量
  • 参数是在参数列表中声明的,作为函数声明的一部分
<?php function text($a){echo $a;}text(10);
?>

运行截图

输出语句

  • 在PHP中有两种基本的输出方式:echo 和 print
  • echo:可以输出一个或多个字符串
  • print:只允许输出一个字符串,返回值总为1
  • 注意:echo 输出的速度比 print 快;echo没有返回值,print有返回值1

echo语句

  • echo是一个语言结构,使用时可使用括号,也可不适应括号,echo 或者 echo()
<?php echo "<h2>PHP 很有趣!</h2>";echo "Hello world!<br>";echo "我要学 PHP!<br>";echo "这是一个", "字符串,", "使用了", "多个", "参数。";
?>

运行截图

print语句

  • print同样是一个语言结构,可使用括号,也可不使用括号:print或者print()
<?php print "<h2>PHP 很有趣!</h2>";print "Hello world!<br>";print "我要学习 PHP!";
?>

运行截图

EOF(heredoc)使用说明

  • PHP EOF是一种在命令行shell和程序语言里定义一个字符串的方法
    使用概述

    • 必须后接分号,否则编译不通过
    • EOF 可以用任意其他代替,只需保证结束标识与开始标识一致
    • 结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)
    • 开始标识可以不带引号或带单双引号,不带引号与带双引号效果一致,解释内嵌的变量和转义符号,带单引号则不解释内嵌的变量和转义符号
    • . 当内容需要内嵌引号(单引号或双引号)时,不需要加转义符,本身对单双引号转义,此处相当与q和qq的用法
<?php
echo <<<EOF<h1>我的第一个标题</h1><p>我的第一个段落。</p>
EOF;
// 结束需要独立一行且前后不能空格
?>

运行截图

数据类型

  • String(字符串)
  • Integer(整型)
  • Float(浮点型)
  • Boolean(布尔型)
  • Array(数组)
  • Object(对象)
  • NULL(空值)

NULL 值

  • NULL 值表示变量没有值,NULL 是数据类型为NULL的值
  • NULL值指明一个变量是否为空值
  • 可以通过设置变量值为NULL 来清空变量数据
<?php
$x="Hello world!";
$x=null;
var_dump($x);
?>

运行截图

类型比较

  • 松散比较: 使用两个等号 == 比较,只比较值,不比较类型
  • 严格比较:用三个等号 === 比较,比较值,比较类型
<?phpif(42 == "42") {echo '1、值相等';}echo "<br>";if(42 === "42") {echo '2、类型相等';} else {echo '3、类型不相等';}
?>

运行截图

常量

  • 常量是一个简单值的标识符,该值在脚本中不能改变
  • 一个常量由英文字母、下划线和数字组成,数字不开头
  • 常量名前不需要加$修饰符
  • 注意:常量在整个脚本中都可以使用(常量是全局的)

设置常量

  • 设置常量使用 define()函数
  • 语法:bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
  • 函数三个参数说明: name:常量名称;value:常量的值,case_insensitive 可选参数,默认为大小写敏感
<?phpdefine("GREETING", "欢迎访问 Runoob.com");echo GREETING;  ?>

运行截图

字符串

  • 字符串变量 用于存储和处理文本
  • 当赋一个文本值给变量时,需加上单引号或双引号
<?php$a = "hello PHP";echo $a;
?>

运行截图

并置运算符

  • 在PHP中,只有一个字符串运算符
  • 并置运算符(.) 作用:用于把两个字符串值连接起来
<?php$a = "hello";$b = "world";echo $a.$b;echo "<br>";echo $a."+++".$b;
?>

运行截图

strlen()函数

  • strlin():计算字符串长度
<?phpecho strlen("hellophp");
?>

运行截图

strpos()函数

  • strpos():用于在字符串内查找一个字符或一段指定的文本
  • 匹配到字符,返回第一个匹配的字符位置
  • 未匹配到,则返回false
<?phpecho strpos("hellophp",'p');
?>

运行截图

运算符

-  赋值运算符:=
- 算数运算符:+
<?php
$x=10;
$y=6;
echo ($x + $y); // 输出16
echo '<br>';  // 换行echo ($x - $y); // 输出4
echo '<br>';  // 换行echo ($x * $y); // 输出60
echo '<br>';  // 换行echo ($x / $y); // 输出1.6666666666667
echo '<br>';  // 换行echo ($x % $y); // 输出4
echo '<br>';  // 换行echo -$x;
?>

赋值运算符

<?php
$x=10;
echo $x; // 输出10$y=20;
$y += 100;
echo $y; // 输出120$z=50;
$z -= 25;
echo $z; // 输出25$i=5;
$i *= 6;
echo $i; // 输出30$j=10;
$j /= 5;
echo $j; // 输出2$k=15;
$k %= 4;
echo $k; // 输出3
?>

递增/递减运算符

<?php
$x=10;
echo ++$x; // 输出11$y=10;
echo $y++; // 输出10$z=5;
echo --$z; // 输出4$i=5;
echo $i--; // 输出5
?>

比较运算符

<?php
$x=100;
$y="100";var_dump($x == $y);
echo "<br>";
var_dump($x === $y);
echo "<br>";
var_dump($x != $y);
echo "<br>";
var_dump($x !== $y);
echo "<br>";$a=50;
$b=90;var_dump($a > $b);
echo "<br>";
var_dump($a < $b);
?>

逻辑运算符

  • and:与
  • or:或
  • xor:异或
  • &&:与
  • ||:或
  • !:非

数组运算符

<?php
$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);
?>

三元运算符

  • 语法格式:(expr1) ? (expr2) : (expr3)
<?php$test = 'hellophp';// 普通写法$username = isset($test) ? $test : 'nobody';echo $username;echo "<br>";$username = $test ?: 'nobody';echo $username;
?>

运行截图

条件判断语句 if…else

  • 条件语句用于根据不同条件执行不同动作

if语句

语法:if(条件){条件成立时要执行的代码;}
实例

<?php$a = 10;if($a > 5){echo "hahahaha";}
?>

运行截图

if…else语句

  • 在条件成立时执行一块代码,条件不成立时执行另一条语句
  • 语法:if(条件){条件成立时执行;}else{条件不成立时执行;}
  • 实例:
<?php$t=100;if ($t<"20"){echo "Have a good day!";}else{echo "Have a good night!";}
?>

运行截图

if…elseif…else语句

  • 在若干条件之一成立时执行一个代码块
  • 语法:if(条件){条件成立时执行;}elseif(条件){条件成立时执行;}elseif(条件){条件成立时执行;}else{条件不成立时执行;}
  • 实例:
<?php$t = 50;if ($t < 10){echo "Have a good morning!";}elseif ($t < 20){echo "Have a good day!";}else{echo "Have a good night!";}
?>

运行截图

条件判断语句Switch

  • 用于根据多个不同条件执行不同动作
  • 语法:switch(){}
  • 实例:
<?php
$favcolor="red";
switch ($favcolor)
{case "red":echo "你喜欢的颜色是红色!";break;
case "blue":echo "你喜欢的颜色是蓝色!";break;
case "green":echo "你喜欢的颜色是绿色!";break;
default:echo "你喜欢的颜色不是 红, 蓝, 或绿色!";
}
?>

运行截图

数组

  • 数组是一个能在单个变量中存储多个值的特殊变量

创建数组

  • array();
  • 数组类型:数值数组、关联数组、多维数组

数值数组

  • 两种创建数值数组的方法
  • 自动分配ID键(ID键总是从0开始)$cars=array("Volvo","BMW","Toyota");
  • 人工分配ID键$cars[0]="Volvo"; $cars[1]="BMW"; $cars[2]="Toyota";
  • 实例:
<?php
$cars=array("成都","北京","南充");
echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".";
?>

运行截图

获取数组长度-count()

  • count() 函数用于返回数组的长度(元素的数量)
  • 实例:
<?php$cars=array("成都","北京","南充");echo count($cars);
?>

运行截图

变量数值数组

  • 遍历并打印数值数组中的所有值
  • 实例:
<?php$cars=array("成都","北京","南充");$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";
  • 实例:
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
echo "Peter is " . $age['Peter'] . " years old.";
?>

运行截图

多维数组

  • 一个数组中的值可以是另一个数组,另一个数组的值也可以是一个数组。依照这种方式,我们可以创建二维或者三维数组
<?php
// 二维数组:
$cars = array
(array("Volvo",100,96),array("BMW",60,59),array("Toyota",110,100)
);

数组排序函数

  • sort():对数组进行升序
  • rsort():对数组进行降序
  • asort() - 根据关联数组的值,对数组进行升序排列
  • ksort() - 根据关联数组的键,对数组进行升序排列
  • arsort() - 根据关联数组的值,对数组进行降序排列
  • krsort() - 根据关联数组的键,对数组进行降序排列
<?php$numbers=array(4,6,2,22,11); rsort($numbers); print_r($numbers);
?>

运行截图

超级全局变量

  • PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用
  • $GLOBALS
  • $_SERVER
  • $_REQUEST
  • $_POST
  • $_GET
  • $_FILES
  • $_ENV
  • $_COOKIE
  • $_SESSION

while循环

  • while 循环将重复执行代码块,直到指定的条件不成立
  • 语法:while(条件){ 执行的代码}
  • 实例:
<?php$a = 0;while ($a < 5) {echo $a;echo "<br>";$a++;}
?>

运行截图

do…while语句

  • 至少执行一次代码,然后检查条件,只要条件成立,就会重复进行循环
  • 语法:do{要执行的语句}while(条件)
  • 实例:
<?php$a = 0;do{echo $a;echo "<br>";$a++;}while ($a < 6);
?>

运行截图

for循环

  • for 循环用于用户预先知道脚本需要运行的次数的情况
  • 语法:for(初始值;条件;增量){执行的代码}
  • 实例:
<?php$a = 0;for(;$a < 10;$a++){echo $a;echo "<br>";}
?>

运行截图

foreach循环

  • foreach 循环用于遍历数组
  • 输出给定数组的值的循环
  • 语法:foreach($array as $value){要执行的代码}
  • 每进行一次循环,当前数组元素的值就会被赋值给 $value 变量(数组指针会逐一地移动),在进行下一次循环时,您将看到数组中的下一个值。
  • 实例:
<?php$x=array("Google","Runoob","Taobao");foreach ($x as $value){echo $value;echo "<br>";}
?>

运行截图

  • 输出给定数组键与值的循环
  • 语法:foreach($array as $key => $value){要执行的代码}
  • 实例:
<?php$x=array("Google","Runoob","Taobao");foreach ($x as $key => $value){echo "key  为 " . $key . ",对应的 value 为 ". $value;echo "<br>";}?>

运行截图

函数

  • 在 PHP 中,提供了超过 1000 个内建的函数

创建函数

  • 函数是通过调用函数来执行的
  • 语法:function functionName(){要执行的代码}
  • 函数命名准则:名称应该提示出它的功能,函数名称以字母或下划线开头
  • 实例:
<?phpfunction writeName(){echo "my name is haha";}writeName();
?>

运行截图

添加函数中的参数

  • 实例:
<?php// 需要传入1个参数值function writeName($name){echo "my name is $name";echo "<br>";}// 需要传入两个参数值function writeCar($car,$id){echo "我的车是 $car,车牌号为 $id";}writeName('hello');writeCar("领克30+","京A666666");
?>

运行截图

返回值

  • 如需让函数返回一个值,使用 return 语句
<?phpfunction add($a,$b){$res = $a + $b;return $res;}echo " 10 + 20 =" . add(10,20) ;
?>

运行截图

魔术常量

  • PHP向它运行的任何脚本提供了大量的预定义常量
  • 但是,很多常量都是由不同的扩展库定义,只有加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了
  • 有八个魔术常量它们的值随着它们在代码中的位置改变而改变

LINE

  • 返回 文件中当前的行号
  • 实例:
<?phpecho "这是第" . __LINE__ . "行";
?>

运行截图

FILE

  • 文件的完整路径和文件名
  • 如果用在被包含文件中,则返回被包含的文件名
  • 实例:
<?phpecho "这该文件位于 '" . __FILE__ . "'";
?>

运行截图

DIR

  • 文件所在的目录
  • 如果用在被包含文件中,则返回被包括的文件所在目录
  • 实例:
<?phpecho "这该文件位于 '" . __DIR__ . "'";
?>

运行截图

FUNCTION

  • 返回所在的函数名称
  • 实例:
<?phpfunction test(){echo "函数名:" . __FUNCTION__;}test();
?>

运行截图

CLASS

  • 返回所在类的名称
  • 实例:
<?phpclass test{function t(){echo "类的名称:" . __CLASS__;echo "<br>";echo "函数名:" . __FUNCTION__;}}$a = new test();$a -> t();
?>

运行截图

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
function test() {echo  '函数名为:' . __METHOD__ ;
}
test();
?>

运行截图

NAMESPACE

  • 当前命名空间的名称
  • 实例:
<?phpnamespace MyProject;echo '命名空间为:"', __NAMESPACE__, '"';
?>

运行截图

命名空间

  • 命名空间可以解决两类问题:
  • 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突
  • 给很长的标识符名称创建别名

定义命名空间

  • 默认情况下,所有的常量、类和函数名都放在全局控件下,和PHP支持的命名空间之前一样
  • 命名空间必须是程序脚本的第一条语句
  • 命名空间通过关键字 namespace 来声明
  • 如果一个文件中包含命名空间,它必须在其他所有代码之前声明命名空间
  • 语法:<?php // 定义代码在 'MyProject' 命名空间中 namespace MyProject;

命名空间使用

  • 非限定名称,或不包含前缀的类名称
  • 限定名称,或包含前缀名称
  • 完全限定名称,或包含了全局前缀操作符的名称

使用命名控件:别名/导入

  • 使用use 操作符导入/使用别名
  • 一行中包含多个use语句
  • 导入和动态名称

面向对象

  • 在面向对象的程序设计( Object-oriented programming,缩写:OOP)
  • 对象是一个由信息及对信息进行处理的描述所组成的整体,是对现实世界的抽象
    对象的主要三个特征

    • 对象的行为:可以对 对象施加那些操作,开灯,关灯就是行为
    • 对象的形态:当施加那些方法是对象如何响应,颜色,尺寸,外型
    • 对象的表示:对象的表示就相当于身份证,具体区分在相同的行为与状态下有什么不同
      比如 Animal(动物) 是一个抽象类,我们可以具体到一只狗跟一只羊,而狗跟羊就是具体的对象,他们有颜色属性,可以写,可以跑等行为状态

面向对象内容

  • 类:定义一件事物的抽象特点
  • 对象:类的实例
  • 成员变量:定义在类内部的变量,可以通过成员函数访问,在类被实例化为对象后,该变量即可称为对象的属性
  • 成员函数:定义在类的内部,可用于访问对象的数据
  • 继承:子类自动共享父类数据结构和方法的机制,这是类之间的一种关系
  • 父类:一个类被其他类继承,该类被称为父类、基类、超类
  • 子类:一个类继承其他类,称为子类或派生类
  • 多态:相同的函数或方法可作用于多种类型的对象上并获得不同的结果,不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性
  • 重载:函数或者方法有同样的名称,但是参数列表不相同的情形
  • 抽象性:将具有一致的数据结构(属性)和行为(操作)的对象抽象成类
  • 封装:将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内
  • 构造函数:用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中
  • 析构函数:析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数
  • 析构函数往往用来做"清理善后" 的工作

类的定义

  • 类使用class关键字后加上类名定义
  • 类名后 {} 内可定义 变量和方法
  • 类的变量使用var 声明,变量也可以初始化值
  • 函数定义类似 PHP 函数的定义,但函数只能通过该类及其实例化的对象访问
  • 实例:
<?phpclass Site {// 成员变量var $url;var $title;//成员函数function setUrl($par){$this->url = $par;  //变量 $this 代表自身的对象}function getUrl(){echo $this->url;echo "<br>";}function setTitle($par){$this->title = $par;}function getTtile(){echo $this->title;echo "<br>";}}
?>

创建对象

  • 使用 new 运算符来实例化该类的对象
  • 实例:
<?phpclass Site {// 成员变量var $url;var $title;//成员函数function setUrl($par){$this->url = $par;  //变量 $this 代表自身的对象}function getUrl(){echo $this->url;echo "<br>";}function setTitle($par){$this->title = $par;}function getTtile(){echo $this->title;echo "<br>";}}$a = new Site;$b = new Site;$c = new Site;
?>

调用成员方法

  • 使用该对象调用成员方法,该对象的成员方法只能操作该对象的成员变量
  • 实例:
<?phpclass Site {// 成员变量var $url;var $title;//成员函数function setUrl($par){$this->url = $par;  //变量 $this 代表自身的对象}function getUrl(){echo $this->url;echo "<br>";}function setTitle($par){$this->title = $par;}function getTtile(){echo $this->title;echo "<br>";}}// 创建对象$a = new Site;$b = new Site;$c = new Site;// 调用成员函数,设置标题和url$a->setTitle("真菜");$b->setTitle("hello");$c->setTitle('world');$a->setUrl('www.cai.com');$b->setUrl('www.hello.com');$c->setUrl('www.world.com');// 调用成员变量,获取标题和url$a->getTtile();$b->getTtile();$c->getTtile();$a->getUrl();$b->getUrl();$c->getUrl();
?>

运行截图

构造函数

  • 主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值
  • 在创建对象的语句中与 new 运算符一起使用
  • 语法:`void __construct ([ mixed $args [, $… ]] )
  • 实例:
<?phpclass Site {// 成员变量var $url;var $title;function __construct( $par1, $par2 ) {$this->url = $par1;$this->title = $par2;}function setTitle($par){$this->title = $par;}function getTtile(){echo $this->title;echo "<br>";}}// 创建对象$a = new Site("真菜",'www.cai.com');$b = new Site("hello",'www.hello.com');$c = new Site('world','www.world.com');// 调用成员变量,获取标题和url$a->getTtile();$b->getTtile();$c->getTtile();$a->getUrl();$b->getUrl();$c->getUrl();
?>

运行截图

析构函数

  • 析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数
  • 语法:void __destruct ( void )

继承

  • 使用关键字 extends 来继承一个类,PHP 不支持多继承
  • 语法:class Child extends Parent { // 代码部分 }
  • 实例:
<?phpclass Site {// 成员变量var $url;var $title;//成员函数function setUrl($par){$this->url = $par;  //变量 $this 代表自身的对象}function getUrl(){echo $this->url;echo "<br>";}function setTitle($par){$this->title = $par;}function getTtile(){echo $this->title;echo "<br>";}}//继承class Child_Site extend Site{var $category;function setCate($par){$this->category = $par;}function getCate(){echo $this->category . PHP_EOL; //PHP_EOL 换行符}}?>

方法重写

  • 如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写
  • 实例:
<?phpclass Site {// 成员变量var $url;var $title;//成员函数function setUrl($par){$this->url = $par;  //变量 $this 代表自身的对象}function getUrl(){echo $this->url;echo "<br>";}function setTitle($par){$this->title = $par;}function getTtile(){echo $this->title;echo "<br>";}}//继承class Child_Site extend Site{// 覆盖写function getTtile(){}function setTitle(){}}?>

访问控制

PHP 对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现

  • public(公有):公有的类成员可以在任何地方被访问。
  • protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。
  • private(私有):私有的类成员则只能被其定义所在的类访问。

属性的访问控制

  • 类属性必须定义为公有,受保护,私有之一。如果用 var 定义,则被视为公有

方法的访问控制

  • 类中的方法可以被定义为公有,私有或受保护。如果没有设置这些关键字,则该方法默认为公有

接口

  • 使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容
  • 通过 interface 关键字来定义,其中定义所有的方法都是空的
  • 接口中定义的所有方法都必须是公有,这是接口的特性
  • 要实现一个接口,使用 implements 操作符
  • 类中必须实现接口中定义的所有方法
  • 类可以实现多个接口,用逗号来分隔多个接口的名称
  • 语法:
// 声明接口
interface name{}// 实现接口
class className implements name{}

常量

  • 把在类中始终保持不变的值定义为常量
  • 定义和使用常量的时候不需要使用 $ 符号
  • 常量的值必须是一个定值,不能是变量,类属性,数学运算的结果或函数调用
  • 可以用一个变量来动态调用类。但该变量的值不能为关键字(如 self,parent 或 static)
  • 定义常量关键字 const

抽象类

  • 任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的
  • 定义为抽象的类不能被实例化
  • 继承一个抽象类的时候,子类必须定义父类中的所有抽象方法,另外,这些方法的访问控制必须和父类中一样
  • 使用关键字 abstract
  • 子类方法可以包含父类抽象方法中不存在的可选参数

static 关键字

  • 声明类属性或方法为 static(静态),就可以不实例化类而直接访问
  • 静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)
  • 由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用
  • 静态属性不可以由对象通过 -> 操作符来访问
  • 用一个变量来动态调用类。但该变量的值不能为关键字 self,parent 或 static

final 关键字

  • 如果父类中的方法被声明为 final,则子类无法覆盖该方法
  • 如果一个类被声明为 final,则不能被继承

调用父类构造方法

  • PHP 不会在子类的构造方法中自动的调用父类的构造方法
  • 要执行父类的构造方法,需要在子类的构造方法中调用 parent::__construct()
  • 实例:
<?php
class BaseClass {function __construct() {print "BaseClass 类中构造方法" . PHP_EOL;}}class SubClass extends BaseClass {function __construct() {parent::__construct();  // 子类构造方法不能自动调用父类的构造方法print "SubClass 类中构造方法" . PHP_EOL;}}class OtherSubClass extends BaseClass {// 继承 BaseClass 的构造方法}// 调用 BaseClass 构造方法$obj = new BaseClass();// 调用 BaseClass、SubClass 构造方法$obj = new SubClass();// 调用 BaseClass 构造方法$obj = new OtherSubClass();
?>

运行截图

PHP基础知识【大纲】相关推荐

  1. Android开发 之 直播视频技术探究之---基础知识大纲介绍

    一.前言 最近各种视频直播app到处都是,各种霸屏,当然我们也是需要体验的,关于视频直播的软件这里就不介绍了,在不是技术的人来看,直播是一种潮流,是一种娱乐方式,但是作为一个高技术的,我们除了看看,更 ...

  2. Android 视频基础知识大纲

    一.前言 最近各种视频直播app到处都是,各种霸屏,当然我们也是需要体验的,关于视频直播的软件这里就不介绍了,在不是技术的人来看,直播是一种潮流,是一种娱乐方式,但是作为一个高技术的,我们除了看看,更 ...

  3. Android中直播视频技术探究之---基础知识大纲介绍

    该博客转载于猿是一种能够改变世界的动物!! 一.前言 最近各种视频直播app到处都是,各种霸屏,当然我们也是需要体验的,关于视频直播的软件这里就不介绍了,在不是技术的人来看,直播是一种潮流,是一种娱乐 ...

  4. Android基础知识大纲

    原文链接:http://android.eoe.cn/topic/overview * Android是什么?* 版本:Android 4.0 r1 原始页面:http://developer.and ...

  5. linux基础知识大纲

    1 . Linux 操作系统概述 Linux操作系统的发展过程.创始人.GNU计划等 源于UNIX: 得益于GNU计划: 借助internet得以壮大: 推动了自由软件.开源软件的发展 1991年底, ...

  6. 计算机二级考试c语言公共基础知识,全国计算机二级c语言公共基础知识考试内容.doc...

    全国计算机二级c语言公共基础知识考试内容 全国计算机二级等级考试的笔试包括基础知识和程序设计两部分,其中基础知识占30分.以下是由关于全国计算机二级c语言公共基础知识考试内容的内容,希望大家喜欢! 全 ...

  7. php百分比乘加,PHP学习笔记第一篇 基础知识

    基础知识 我将php语言学习里面最最基础的部分,需要第一个学的,必须牢牢掌握的,归类到一起. 大纲 1.数据类型 2.变量 3.常量 4.操作符 5.流程控制 6.数组 7.字符串操作 8.正则 基础 ...

  8. 使用微型计算机的基础知识,计算机应用基础考试大纲基本要求1具有使用微型计算机的基础知识.DOC...

    计算机应用基础考试大纲基本要求1具有使用微型计算机的基础知识 计算机应用基础考试大纲 基本要求 ???????????????????????????????????????????????????? ...

  9. 计算机知识应用,计算机知识应用基础复习大纲

    计算机知识应用基础复习大纲 计算机应用基础复习大纲 包括六大部分内容: 一. 计算机基础知识 二. 操作系统 三. 文字处理软件word 四. 电子表格软件excel 五. 文稿演示制作软件power ...

  10. 江苏省计算机一级考试基础知识,江苏省计算机一级考试大纲及复习指南

    江苏省计算机一级考试大纲及复习指南 江苏省计算机等级考试大纲(一级) 计算机信息技术考试要求(试用)及使用说明 1.掌握计算机信息处理与应用的基础知识. 2.能比较熟练地使用六个常用的软件(IE.Ou ...

最新文章

  1. 判断一个数列是不是搜索二叉树后续遍历输出的结果
  2. triggered_time
  3. java条码大小_java - ML Kit条形码扫描:无效的图像数据大小
  4. 五、CPU详解、寄存器详解、标志寄存器详解
  5. 手机学python语言用什么软件好_盘点几个在手机上可以用来学习编程的软件
  6. 详解如何实现最基本的AJAX框架
  7. UVa1587 - Box
  8. lisp princ详解_LISP-输入和输出
  9. java多线程同步synchronized,浅析Java多线程同步synchronized,javasynchronized
  10. Android智能硬件开发心得总结(一)
  11. 人工智能:一种现代的方法|课后习题解答
  12. 改善客户服务体验的 5 种方法
  13. 轻松掌握Mybatis(上)
  14. alibaba.jym.item.external.goods.batch.offsale( 交易猫外部商家批量下架商品接口 )
  15. ESP8266的Web配网以及强制门户的实现(连接wifi自动打开网页)
  16. 邮箱名不允许服务器响应,C#发送邮件时提示:“不允许使用邮箱名称。服务器响应为:”的错误解决办法...
  17. mtatlas mysql_MHA-Atlas-MySQL高可用(下)
  18. Manifest merger failed : uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared in lib
  19. Ubuntu子系统安装GPGPU-SIM(附相关文件)
  20. web HTML5新标签对IE低版本浏览器的兼容处理

热门文章

  1. 矩阵转置算法 oracle,请编写程序fun,函数的功能是:实现B=A+Aˊ,即把矩阵A加上A的转置,存放在矩阵B中。计算结果在main函...
  2. Java图像处理方面的工具库和开发包
  3. 2021届毕业生还没找到Android开发工作,看这一篇就够了!
  4. 使用java导入excel表格中的内容进入到数据库中,出现excel表格的后缀名错误,如何解决。
  5. 利用RecordRTC支持web端录制屏幕(vue写法)
  6. 机器人图形变变变_幼儿园全景数学特色课程
  7. 网络运维与安全岗位月薪2.5w,您还不知道的前景!
  8. 2的32次方减1用python_3.Python入门
  9. 运行pixellib出现错误
  10. unity IK初步应用 让游戏物体眼镜对准摄像头