摘要:一.类声明与实例化 + 类的声明:class 类名{} + 类的实例化:new 类名();// 括号就是调用构造方法的 + 对象成员访问: &
一.类声明与实例化
+ 类的声明:class 类名{}
+ 类的实例化:new 类名();// 括号就是调用构造方法的
+ 对象成员访问:
* 类内部:$this->name;
* 类外部:$obj->name;
类与对象
* 1.类是对象的模板,对象是类的实例化;
* 2.类的声明:class
* 3.类的实例化:创建一个类的对象的过程:new
类的声明:
class 类名{}
类名:必须是合法标识符,只能以字母或者下划线开始,后紧跟字母和下划线
类名:行业规定,首字母大写
类中成员:属性和方法
属性:就是累变量,类常量
方法:函数来表示
class Hero
{
//定义类属性
public $name = '廖化';
public $sex = '男';
public $age = 30;
public $company = '蜀中无大将,廖化做先锋';
//技能
public function skill($type,$skillName)
{
//$this 是伪变量,始终指向当前类的实例对象
//$this 只能用在类的内部,引用类的成员
$name = $this->name;
return $name . '正在使用'.$type.'属性技能---'.$skillName;
}
// 另一个方法
public function anotherSkill($event)
{
$name = $this->name;
return $name.'又使用了'.$event.'技能';
}
} 类的实例化
1.使用关键字:new 类名
2.返回的是对象类型的变量
3.如何访问对象成员:对象变量->(对象运算符)访问对象的公共成员
//实例化类
$hero = new Hero();
echo gettype($hero).'<br>';
//访问对象中的属性
echo '姓名是'. $hero->name.'<br>';
echo '职位是'. $hero->company.'<br>';
//访问对象中的方法
echo $hero->skill('火焰','火焰打击').'<hr>';
echo $hero->anotherSkill('撞击');二.类属性与类常量
+ 类属性:只能使用字面量或构造方法来初始化,不能使用表达式
+ 类常量:
- 类常量必须要用const 关键字声明
- 类常量声明时必须初始化
- 类常量推荐全部采用大写字母
- 类常量可以被所有类实例所共享
- 类常量必须使用类名来访问
* 类内:self/static::CONST
* 类外:类名::CONST
1. 类的属性初始化
2. 类常量初始化与访问
3.构造方法
3.1 在构造(创建)类的实例对象的时候,自动调用
3.2 以双下划线开头,这类方法有一个特殊的名称:魔术方法(事件驱动)
3.3 主要用于初始化成员,或生成对象时自动完成的一些工作
class Stu
{
public $name; //属性初始化必须使用字面量或者构造方法
public $course; //属性初始化不允许使用表达式
public $skill; //默认为null,抽象属性
const NATION = 'CHINA'; //声明类常量NATION 不可修改不可删除
public function __construct($name = '赵云', $course = 'php') //创建构造方法 并传入初始化参数的默认值
{
$this->name = $name;
$this->course = $course;
}
public function getNation()
{
// return $this->name.'的国籍是:'. Stu::NATION.'<br>'; //不推荐这么使用
//当前类的引用标识符 :self::
// return $this->name.'的国籍是:'. static::NATION.'<br>';//等价于下面的
return $this->name.'的国籍是:'. self::NATION.'<br>';
}
}
$stu = new Stu();不向构造方法中传入参数 使用默认值
echo '姓名是:' . $stu->name . '课程是:'. $stu->course.'<br>'; //姓名是:赵云课程是:PHP
$stu = new Stu('西门大官人','sql');
echo '姓名是:' . $stu->name . '课程是:'. $stu->course.'<br>'; //姓名是:西门大官人课程是:sql
//:: 就是范围解析符 ,作用域解析符
echo $stu->name.'的国籍是'.Stu::NATION.'<br>'; //使用Stu::NATION 来调用类中常量
echo $stu->getNation();三.类的自动加载
+ __autoload():已淘汰!
+ spl_autoload_register():注册自动加载器
require 与include功能一样,但出错时处理机制不同
include :没有导入成功,只给出警告,脚本仍然执行
require :直接退出
include_once :仅允许导入一次
require = include +die /exit;
include 'public/Car.php';
include 'public/Mobile.php';
//自动加载器:最重要的一个参数就是一个回调
spl_autoload_register(function($className){ // (当实例化一个页面中没有的类时调用,将类名传入回调)
//推荐使用绝对路径
// require 'public/'.$className.'.php';
require __DIR__.'\public\\'.$className.'.php'; //绝对路径拼接 引用这个文件
});
$car = new Car('兰博基尼','K3',10000000);
$mobile = new Mobile('魅族','X8',2000);
echo $car->brand.'-'.$car->model.':'.$car->price.'元<br>'; //成功使用类中属性
echo $mobile->brand.'-'.$mobile->model.':'.$mobile->price.'元<br>'; //成功使用类中属性四.类成员的访问限制
+ 访问限制符 类的内部 类的继承上下文 类的外部
public 允许 允许 允许
protected 允许 允许 禁止
private 允许 禁止 禁止
+ public 公共访问符
+ protected 受保护的 类的外部不可访问,子类可以访问
+ private 私有的 仅允许类中使用 子类也不可以使用
//类成员的访问限制
class Staff
{
//public 公共访问限制符 类的内部外部以及继承中都可以访问
public $name;
//protected :受保护的,仅在类内部,以及子类中使用,外部不可以访问
protected $dept;
//private: 私有的,仅在类的内部,子类以及外部不可访问
private $salary;
//构造方法(构造器)
public function __construct($name,$dept,$salary) //初始化类中属性
{
$this->name = $name;
$this->dept = $dept;
$this->salary = $salary;
}
//创建一个接口,来访问外部访问受限的数据
public function getDept()
{
$res = $this->dept;
if($this->name !== '张角'){
return $res;
}
return '该员工在保密部门';
}
//给私有成员创建一个接口
public function getSalary()
{
$res = $this->test(); //调用类中私有方法
if($this->dept == '黄巾军部部长'){
return '老板身边的人你也敢看,真心活腻了!';
}
return $res;
}
//创建一个私有方法,
private function test() //私有方法 ,只能类中调用
{
$res = $this->salary;
return $res;
}
}
//$staff = new Staff('张角','黄巾军部部长',5000);
$staff = new Staff('曹嵩','副部长',3000);
echo '姓名是:'.$staff->name.'<br>';
//echo '部门是:'.$staff->dept.'<br>'; //受保护 不可直接访问
echo '部门是:'.$staff->getDept().'<br>'; //受保护 不可直接访问
//echo '工资是:'.$staff->salary.'<br>'; //私有的 不可直接访问
echo '工资是:'.$staff->getSalary().'<br>'; //私有的 不可直接访问
批改老师:韦小宝批改时间:2018-11-24 13:32:21
老师总结:不错不错很棒!作业依旧写的很完美!不要骄傲保持下去!继续加油吧!!