作业1:类的声明与实例化
<?php
/**
类的声明与实例化
*/
//声明一个类man;
class man{ //类属性必须定义为公有,受保护,私有之一,可以不初始值;
public $name;
protected $sex;
private $age;
public function speak (){
echo 'I can speak English !';
}
function __construct($name,$sex,$age) //构造方法,用来初始化
{
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
}
}
//实例化一个类
$man1 =new man('peter','male',18);
//访问以下,他的方法
echo $man1->name;
echo '<br>';
$man1->speak();点击 "运行实例" 按钮查看在线实例
作业2:类常量与类属性的重载;
<?php
/**
类常量与类属性的重载
*/
class staff{
public $name;
public $sex;
protected $age;
private $salary;
const ATTACH_TO = 'Apple.lnc'; //类常量
//构造方法
public function __construct($name,$sex,$age,$salary)
{
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
$this->salary = $salary;
}
// get方法的,全局
public function __get($name)
{
if ($name == 'salary'){
return $name.'不对外公开';
}else{
return $this->$name;
}
}
// set 方法 更新属性重载
public function __set($name, $value)
{
if ($name == ('age' or 'salary')){
echo $name.'不允许更改!';
}else{
$this->name = $value;
}
}
// isset 重载
public function __isset($name)
{
if ($name == 'salary'){
return 'false';
}
return isset($this->$name); //有就返回true
}
//销毁属性重载
public function __unset($name)
{
if ($name == 'salary' || 'age'){
return false;
}
unset($this->$name);
}
}
//访问类常量
echo '隶属于:',staff::ATTACH_TO,'<br>';
//new 一个实例
$employee = new staff('core','meal','22',6000);
//访问 employee 的属性,方法
//公共属性,所以可以外部访问
echo '姓名:'.$employee->name.'性别:'.$employee->sex;
echo '<br>';
// 尝试获取私有属性
echo $employee->salary; //不对外公开
echo '<br>';
// isset 检测是否有该属性
echo isset($employee->friend)?'存在':'不存在';
echo '<br>';
//unset 销毁
unset($employee->age); //unset 无返回值
echo $employee->age;点击 "运行实例" 按钮查看在线实例
作业3:类的继承与方法重写
<?php
/**
类的继承与方法重写
* 子类可以继承父类除私有的全部属性
* 子类重新父类方法,覆盖
* 类常量也可以被重写
*/
class staff
{
public $name;
public $sex;
protected $age;
private $salary;
const ATTACH_TO = 'Apple.lnc'; //类常量
//构造方法
public function __construct($name, $sex, $age, $salary)
{
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
$this->salary = $salary;
}
public function speak(){
echo 'we can speak English!';
}
}
class staff_cn extends staff{ //提高代码重用性。
public $department; // 子类特有属性
const ATTACH_TO = 'Apple.cn.lnc';//重写父类常量
public function __construct($name, $sex, $age, $salary,$department) //重写父类构造方法(多态)
{
/* $this->name = $name;
$this->sex = $sex;
$this->age = $age;
$this->salary = $salary;*/
parent::__construct($name, $sex, $age, $salary);//引用父类,简化代码
$this->$department= $department;
}
public function speak(){ //重写父类一般方法
echo 'we can speak chinese and english!';
}
}
$employee1 = new staff_cn('jimmy','male','66',8000,'cn');
//echo $employee1->salary;// 无法访问父类私有的属性
//echo $employee1->age; //只能在子类内部使用
$employee1->speak(); //调用子类的speak而不是父类的speak();
echo '<br>';
echo staff::ATTACH_TO;
echo '<br>';
echo staff_cn::ATTACH_TO;点击 "运行实例" 按钮查看在线实例
作业4:类中静态成员的声明与访问
<?php
/**
声明类属性或方法为 static(静态),就可以不实例化类而直接访问。
静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。
由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用,而是使用self。
静态属性不可以由对象通过 -> 操作符来访问。
*
*
* 范围解析符的作用:
* 1. 访问静态成员;
* 2. 访问类常量;
* 3. 继承上下文中引用被覆盖成员
*/
class Demo5{
//声明2个静态成员
public static $pdo;
protected static $db =['type'=>'mysql','host'=>'localhost','dbname'=>'stu','user'=>'root','pass'=>'root'];
// 静态方法
public static function connect(){ //用来连接数据库的方法
$dsn = self::$db['type'].':host='.self::$db['host'].';dbname='.self::$db['dbname']; //拼接一个dsn 字符串
self::$pdo = new PDO($dsn,self::$db['user'],self::$db['pass']); //将new 的pdo赋值给static变量
}
//准备SQL语句与执行
public static function select($talbe,$fields,$num){
// 搞一个预处理对象
$stmt = self::$pdo->prepare("select {$fields} from {$talbe} limit {$num}");
//执行预处理语句
$stmt->execute();
//返回结果集
return $stmt->fetchAll(PDO::FETCH_ASSOC);//只取关联数组,不要索引
}
}
Demo5::connect(); //调用connect()方法连接数据库
$result = Demo5::select('student','name,sex,class',3); //调用select()方法,查询数据
echo '<pre>',var_export($result);点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号