摘要:/基类 class Person { /** * public protected private 为不同的访问限制 * public 本类 ,子类&
/基类
class Person
{
/**
* public protected private 为不同的访问限制
* public 本类 ,子类 ,外部都可以访问
* protected 本类 子类 可以访问,外部不能访问
* private 私有 ,只有自己可以访问
*
* 访问范围和java 一样
*
*/
public $name;
protected $age;
private $money;
static $work = ' php 程序员'; //static 修饰的 属性和方法为 静态属性或者方法 ,属于类,不属于任何实例
/**
* Person constructor.
* @param $name
* @param $age
* @param $money
* 类的构造方法
*/
public function __construct($name, $age, $money)
{
$this->name = $name;
$this->age = $age;
$this->money = $money;
}
public function showMe()
{
echo '我叫 :' . $this->name . ' 我今年 ' . $this->age . ' 我资产 ' . $this->money;
}
//静态方法的定义
public static function work()
{
//访问类中静态属性的方法 self:: ,类名:: ,static ::
//self和 类名在有继承关系 的类中 ,不能动态 根据实例的类动态分配 同名的属性值,
//子类和父类有同名的属性 访问必须用static 来限定,(后期静态绑定,由调用者决定 输出)
// echo '我的工作是 '.self::$work;
// echo '我的工作 '.Person::$work;
echo '我的工作是 ' . static::$work; //后期静态绑定
}
//重载 当调用类中不存在的方法,会自动调用__call()方法
public function __call($name, $arguments)
{
// TODO: Implement __call() method.处理重载逻辑
// 1.判断参数个数
$num = count($arguments);
//2.判断方法存在
if($name == 'study'){
if(method_exists($this,$f='study'.$num)){ //对应参数存在就调用
call_user_func_array([$this,$f],$arguments);
}
}
}
public function study1($name)
{
echo '调用了1个参数的study 方法';
}
public function study2($name, $name2)
{
echo '调用了2个参数的study 方法';
}
public function study3($name, $name1, $name2)
{
echo '调用了3个参数的study 方法';
}
}
//trait 类
trait Dog{
public function show(){
echo '我是个小狗';
}
public function work(){
echo '我的工作是看家';
}
}
//trait 类
trait Cat{
public function show(){
echo '我是个小猫';
}
public function work(){
echo '我的工作是卖萌。。。';
}
}
// 基类 子类 trait 三个有同名方法时 , 子类调用同名方法 访问的 优先级 子类>trait>父类
//继承 类
class XiaoMing extends Person{
//多个 trait 类 以及 有方法重名 处理
use Dog,Cat{
Dog::work insteadof Cat; //Dog ->work 方法替代 cat->work
Cat::work as workC; //Cat ->wor 取别名 workC 调用=> (new Cat())->workC();
}
public function work(){
echo '我是小明,我的工作 是学习';
}
}
//实例化类
$p = new Person('狗蛋', 20, '100w');
//调用类的方法
$p->showMe();
echo '<br>';
//访问 静态方法
Person::work();
echo '<br>';
//访问属性
Person::$work;
//重载调用
$p->study('张三');
echo '<br>';
$p->study('张三','李四');
批改老师:韦小宝批改时间:2018-11-14 09:19:30
老师总结:嗯!写的很不错!不过课后还得记得多多练习啊!!加油吧!!