PHP基础知识【大纲】

简介

  • 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
<?php
    print "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关键字
  • 注意:该变量仍然是函数的局部变量
<?php
	function 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);
?>

运行截图
在这里插入图片描述

类型比较

  • 松散比较: 使用两个等号 == 比较,只比较值,不比较类型
  • 严格比较:用三个等号 === 比较,比较值,比较类型
<?php
	if(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 可选参数,默认为大小写敏感
<?php

	define("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():计算字符串长度
<?php
	echo strlen("hellophp");
?>

运行截图
在这里插入图片描述

strpos()函数

  • strpos():用于在字符串内查找一个字符或一段指定的文本
  • 匹配到字符,返回第一个匹配的字符位置
  • 未匹配到,则返回false
<?php
	echo 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(){要执行的代码}
  • 函数命名准则:名称应该提示出它的功能,函数名称以字母或下划线开头
  • 实例:
<?php
	function 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 语句
<?php
	function add($a,$b){
		$res = $a + $b;
		return $res;
	}
	echo " 10 + 20 =" . add(10,20) ;
?>

运行截图
在这里插入图片描述

魔术常量

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

LINE

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

运行截图
在这里插入图片描述

FILE

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

运行截图
在这里插入图片描述

DIR

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

运行截图
在这里插入图片描述

FUNCTION

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

运行截图
在这里插入图片描述

CLASS

  • 返回所在类的名称
  • 实例:
<?php
	class 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

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

运行截图
在这里插入图片描述

命名空间

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

定义命名空间

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

命名空间使用

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

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

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

面向对象

  • 在面向对象的程序设计( Object-oriented programming,缩写:OOP)
  • 对象是一个由信息及对信息进行处理的描述所组成的整体,是对现实世界的抽象
    对象的主要三个特征
    • 对象的行为:可以对 对象施加那些操作,开灯,关灯就是行为
    • 对象的形态:当施加那些方法是对象如何响应,颜色,尺寸,外型
    • 对象的表示:对象的表示就相当于身份证,具体区分在相同的行为与状态下有什么不同
      比如 Animal(动物) 是一个抽象类,我们可以具体到一只狗跟一只羊,而狗跟羊就是具体的对象,他们有颜色属性,可以写,可以跑等行为状态

面向对象内容

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

类的定义

  • 类使用class关键字后加上类名定义
  • 类名后 {} 内可定义 变量和方法
  • 类的变量使用var 声明,变量也可以初始化值
  • 函数定义类似 PHP 函数的定义,但函数只能通过该类及其实例化的对象访问
  • 实例:
<?php
	class 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 运算符来实例化该类的对象
  • 实例:
<?php
	class 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;
?>

调用成员方法

  • 使用该对象调用成员方法,该对象的成员方法只能操作该对象的成员变量
  • 实例:
<?php
	class 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 [, $… ]] )
  • 实例:
<?php
	class 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 { // 代码部分 }
  • 实例:
<?php
	class 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),也称为方法的重写
  • 实例:
<?php
	class 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();
?>

运行截图
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值