批改状态:合格
老师批语:
类的声明和实例化
class Demo1
{
}
//使用类首先要实例化,new
$demo1 = new demo1();
//给对象添加一些属性和方法(2个属性,1个方法)
$demo1 -> name = 'peter';
$demo1 -> sex = '男';
$demo1 -> hello = function(){
return '我是一个自定义的方法';
};
//访问对象成员(属性和方法)
echo $demo1->name,':',$demo1->sex.'<br>';2.累常量与类属性的重载;
class Demo3
{
//类常量:被所有对象所共享的数据
const SITE_NAME = 'php中文网';
//声明私有属性
private $name;
private $course;
private $grade;
//构造方法(魔术方法),构造器
public function __construct($name, $course, $grade)
{
$this->name = $name;
$this->course = $course;
$this->grade = $grade;
//构造方法中调用本类的方法,在创建对象之前执行
echo $this->show();
}
//输出当前属性的内容
public function show()
{
return $this->name . '的' . $this->course . '课程成绩是' . $this->grade;
}
//获取属性的重载,$name是要查看的属性名称,就是一个字符串
public function __get($name)
{
if ($name == 'grade') {
echo $name . '不允许查看';
}
return $this->$name;
}
//设置属性的重载方法
public function __set($name, $value)
{
if ($name == 'grade') {
echo $name . '不允许修改';
}
$this->$name = $value;
}
//属性检测的重载方法
public function __isset($name)
{
if ($name == 'grade') {
return false;
}
return isset($this->$name);
}
//销魂属性的重载方法
public function __unset($name)
{
if($name == 'grade' || $name = 'name'){
return false;
}
unset($this->$name);
}
}
//访问类常量,必须通过类名::类常量名称
echo Demo3::SITE_NAME,'<hr>';
//实例化
$demo3 = new Demo3('peter','php',82);
//var_dump($demo3);
//echo $demo3->show();
//new Demo3('peter','php',82); //new的时候就已经echo数据了
echo '<hr>';
//3属性重载:四种场景:获取,设置,检测,销毁
//当从类的外部访问类中不存在或无权访问的属性的时候,这些重载方法会被自动调用(触发)
//1.获取
echo '姓名:'.$demo3->name.'<br>';
echo '成绩:'.$demo3->grade.'<br>';
//2.设置
$demo3->course = 'python';
echo '课程:',$demo3->course,'<br>';
//3.检测
echo (isset($demo3->name) ? '存在<br>' : '不存在<br>');
echo (isset($demo3->grade) ? '存在<br>' : '不存在<br>');
//3.销毁
unset($demo3->$course); //unset()没有返回值
echo '姓名:'.$demo3->name.'<br>'; //没有销毁掉姓名和成绩,上面有做判断3.类的继承与方法重写;
class Demo4
{
//父类属性
public $name;
protected $age;
private $salary;
const APP_NAME = '学生管理系统'; //类常量 可以在子类中进行重写
//父类构造器
public function __construct($name,$age)
{
$this->name = $name;
$this->age = $age;
}
//属性访问重载
public function __get($name)
{
if(isset($this->$name)){
return $this->$name;
}
return '非法操作';
}
}
class Demo4_1 extends Demo4 //子类,派生类
{
//子类私有属性
private $sex;
const APP_NAME = '教师管理系统'; //类常量
//用多态的方式对父类的构造方法进行重写
public function __construct($name,$age,$sex)
{
//多态:子类中和父类中同名的方法进行重写
parent::__construct($name,$age);//实现简写
// $this->name = $name;
// $this->age = $age;
$this->sex = $sex;
}
}
//new的demo4_1,这个就是工作类
$demo4_1 = new Demo4('peter',20,'male');
echo $demo4_1 -> age; //没有属性访问重载,是不能访问的
echo $demo4_1 -> name;
echo $demo4_1 ->sex;
echo Demo4::APP_NAME;
echo '<hr>';
echo Demo4_1::APP_NAME;4.类中静态成员的声明与访问;
class Demo5
{
public static $pdo = null;
protected static $db =[
'type' => 'mysql',
'host' => '127.0.0.1',
'dbname' => 'php',
'user' => 'root',
'pass' => 'root',
];
//连接数据库并生成PDO对象
public static function connect()
{
$dsn = 'mysql:host=127.0.0.1;dbname=php';
// $dsn = self::$db['type'].':host='.self::$db.['host'].';dbname='.self::$db['dbname'];
self::$pdo = new PDO($dsn,self::$db['user'],self::$db['pass']);
}
public static function select($table,$files='*',$num=5)
{
$stmt = self::$pdo->prepare("SELECT {$files} FROM {$table} LIMIT {$num}");
$stmt -> execute();
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
}
//连接数据库
Demo5::connect();
//var_dump(Demo5::$pdo);
$result = Demo5::select('staff','name,age,salary',6);
echo '<pre>'.var_export($result);
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号