批改状态:合格
老师批语:
类的声明和实例化
类的声明使用关键字class,一般类名首字母大写。而实例化则使用new这个关键字,案例如下:
<?php
/**
* 类的声明与实例化
*/
//类声明 用关键字class
class Person {
}
//使用new来创建对象
$demo = new Person();
var_dump($demo);
//添加一些属性和方法
$demo->name = 'jack';
$demo->age = 33;
$demo->hello = function (){
return '我是匿名函数';
};
//使用->来访问 ,成员属性、方法
echo $demo->name,'年龄是',$demo->age,'岁<br>';
//echo $demo->hello();//这里调用的是hello方法,不是匿名函数
//正确调用:以回调方式运行
echo call_user_func($demo->hello);点击 "运行实例" 按钮查看在线实例
类的常量与属性的重载
类常量是属于类的,为所有对象共享。使用类名::常量名来访问。属性重载指的是:访问不存在或者访问受限的属性时会自动调用重载方法,目的就是动态创建属性。案例如下:
<?php
/**
* 类属性的重载 指动态的’创建‘属性和方法。访问不存在或私有的属性会自动调用重载方法
* 使用魔术方法__set() __get() 来访问
*/
class Person{
const IDOL = 'jackson';
public $name ;
private $age;
private $sex;
public function __construct($name,$age,$sex)
{
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
}
//__get()访问私有属性
public function __get($name)
{
return $this->$name;
}
//__set() 设置私有属性
public function __set($name, $value)
{
$this->$name = $value;
}
}
$demo1 = new Person('jackson',33,'男');
echo '姓名:',$demo1->name,',年龄:',$demo1->age,',性别:',$demo1->sex,'<br>';
echo Person::IDOL;点击 "运行实例" 按钮查看在线实例
类的继承与方法重写
类的继承使用extends,一个类只能有一个父类。继承可以减少代码的重复。而重写则是子类有一个方法和父类相同,但参数和内容却不同。代码如下:
<?php
/**
* 继承与多态
* 继承指类之间的继承,代码复用的重要手段, 函数也可以
* 关键字:extends
* 引用父类成员:parent::
* 子类可以继承父类的公共和受保护 成员
*/
class demo4{
//父类属性
public $name;
protected $age;
private $salary;
const NAME = 'DEMO4';
private $sex = 'female';
//父类构造器
public function __construct($name,$age){
$this->name = $name;
$this->age = $age;
}
//属性访问重载
public function __get($name)
{ //判断属性是否存在
if (isset($this->$name)){
return $this->$name;
}
return '非法属性';
}
}
//子类
class demo41 extends demo4 {
private $sex;
const NAME = 'demo41';//重写父类静态啊属性
//重写父类构造器
public function __construct($name, $age, $sex='male')
{
parent::__construct($name, $age);
$this->sex = $sex;
}
public function __get($name)
{
// if (isset($this->$name)){
// return $this->$name;
// }
// return '非法属性';
return parent::__get($name);//这样会访问不了自己的私有属性
}
}
//echo (new demo41('june',88,'male'))->name;
$demo41 = new demo41('jason','22');
//访问父类中的属性
echo $demo41->name,'<br>';
echo $demo41->age,'<br>';
echo $demo41->salary,'<br>';//父类的私有属性继承不了
echo $demo41->sex,'<br>';//直接调用父类设置器,识别不出子类属性
echo demo41::NAME;点击 "运行实例" 按钮查看在线实例
类中静态成员的声明与访问
类中的静态成员与访问
1.创建使用关键字:static
2.静态成员:静态属性、静态方法
3.静态成员属于类,使用类来访问
4.静态成员与对象无关,所以不使用伪变量$this,引用自身类用 self::$var,这里有$符
5.访问: 类名::静态成员
代码如下:
//数据库连接类 实现数据库连接
class Demo5{
public static $pdo = null;
//数据库连接参数
protected static $db =[
'type' => 'mysql',
'host' => '127.0.0.1',
'dbname' => 'php',
'user' => 'root',
'pass' => 'root'
];
//连接数据库的方法
public static function connect(){
$dsn = self::$db['type'].':host='.self::$db['host'].';dbname='.self::$db['dbname'];
//创建pdo类
self::$pdo = new PDO($dsn, self::$db['user'], self::$db['pass']);
}
//查询数据库方法
public static function select(){
//准备sql语句
$sql = "SELECT * FROM `staff` LIMIT 5;";
//创建预处理对象
$stmt = self::$pdo->prepare($sql);
//执行语句
$stmt->execute();
//获取结果
return $stmt->fetchAll(PDO::FETCH_ASSOC);//指定返回关联数组
}
}
//连接数据库
Demo5::connect();
//查询数据表
$res = Demo5::select();
echo '<pre>',var_export($res);点击 "运行实例" 按钮查看在线实例
总结:这里主要了解了类的基本知识,以及三大特征。
1.重载方法可以限定在外部随意创建属性,也提供了一个访问私有或受保护的属性或方法
2.静态成员的访问方式容易和非静态成员的搅和,静态成员访问存在$符。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号