为了账号安全,请及时绑定邮箱和手机立即绑定
慕课网数字资源数据库体验端
PHP面向对象编程_学习笔记_慕课网
为了账号安全,请及时绑定邮箱和手机立即绑定

PHP面向对象编程

Peter 其它
难度初级
时长 3小时14分
  • 多态 <?php date_default_timezone_set("PRC"); /** * 多态 * 1. 只要某个对象实现了接口(instanceof),就可以直接在对象上调用接口的方法 */ interface ICanEat { public function eat($food); } // Human类实现了ICanEat接口 class Human implements ICanEat { // 跟Animal类的实现是不同的 public function eat($food){ echo "Human eating " . $food . "\n"; } } // Animal类实现了ICanEat接口 class Animal implements ICanEat { public function eat($food){ echo "Animal eating " . $food . "\n"; } } function eat($obj){ if($obj instanceof ICanEat){ $obj->eat("FOOD"); // 不需要知道到底是Human还是Animal,直接吃就行了 }else{ echo "Can't eat!\n"; } } $man = new Human(); $monkey = new Animal(); // 同样的代码,传入接口的不同实现类的时候,表现不同。这就是为什么成为多态的原因。 eat($man); eat($monkey); ?>
    查看全部
    0 采集 收起 来源:课程总结

    2018-03-22

  • 接口 (2) // step1 不同的类可以实现同一个接口,定义接口方法的不同实现 $man = new Human(); $man->eat("Apple"); $monkey = new Animal(); $monkey->eat("Banana"); // step2 尝试删除Human的eat方法并运行 // 实现了某个接口的类必须提供接口中定义的方法 // step3 不能用接口创建对象,但是能够判断某个对象是否实现了某个接口 //$eatObj = new ICanEat(); var_dump($man instanceof ICanEat); // 判断某个对象是否实现了某个接口 // step 4 接口可以继承接口 interface ICanPee extends ICanEat { public function pee(); } class Human1 implements ICanPee{ public function pee(){} } ?>
    查看全部
    0 采集 收起 来源:课程总结

    2018-03-22

  • 接口 (1) <?php date_default_timezone_set("PRC"); /** * 接口 * 1. 接口的基本概念和基本使用方法 * 2. 接口里面的方法没有具体的实现 * 3. 实现了某个接口的类必须提供接口中定义的方法 * 4. 不能用接口创建对象,但是能够判断某个对象是否实现了某个接口 * 5. 接口可以继承接口(interface extends interface) * 6. 接口中定义的所有方法都必须是公有,这是接口的特性。 */ interface ICanEat { public function eat($food); } // Human类实现了ICanEat接口 class Human implements ICanEat { // 跟Animal类的实现是不同的 public function eat($food){ echo "Human eating " . $food . "\n"; } } // Animal类实现了ICanEat接口 class Animal implements ICanEat { public function eat($food){ echo "Animal eating " . $food . "\n"; } }
    查看全部
    0 采集 收起 来源:课程总结

    2018-03-22

  • 类的继承 <?php date_default_timezone_set("PRC"); /** * 重写和Final * 1. 子类中编写跟父类完全一致的方法可以完成对父类方法的重写 * 2. 对于不想被任何类继承的类可以在class之前添加final关键字 * 3. 对于不想被子类重写(overwrite, 修改)的方法,可以在方法定义前面添加final关键字 */ class BaseClass { public function test() { echo "BaseClass::test() called\n"; } public function moreTesting() { echo "BaseClass::moreTesting() called\n"; } } class ChildClass extends BaseClass { // 重写时参数不一定要跟父类完全一致 public function moreTesting($tmp=null) { echo "ChildClass::moreTesting() called\n"; } } // Results in Fatal error: Cannot override final method BaseClass::moreTesting() $obj = new ChildClass(); $obj->moreTesting(); ?>
    查看全部
    0 采集 收起 来源:课程总结

    2018-03-22

  • 魔术方法 (2) // 通过这两个方法可以实现动态的对象属性 public function __get($name){ return "Getting the property " . $name; } public function __set($name, $value){ echo "Setting the property " . $name . " to value ". $value. "\n"; } public function __isset($name){ echo "__isset invoked\n"; return false; } public function __unset($name){ echo "unsetting property " . $name; } } $obj = new MagicTest(); echo $obj->name . "\n"; $obj->name = "Name Value"; echo '$obj->name is set? '. isset($obj->name) . "\n"; echo '$obj->name is empty?' . empty($obj->name) . "\n"; unset($obj->name); ?>
    查看全部
    0 采集 收起 来源:课程总结

    2018-03-22

  • 魔术方法 (1) <?php date_default_timezone_set("PRC"); /** * 魔术方法3之属性重载 * 1. 在给不可访问属性赋值时,__set() 会被调用。 * 2. 读取不可访问属性的值时,__get() 会被调用。 * 3. 当对不可访问属性调用 isset() 和empty()时,__isset() 会被调用。 * 4. 当对不可访问属性调用 unset() 时,__unset() 会被调用 */ class MagicTest{ public function __tostring(){ return "This is the Class MagicTest.\n"; } public function __invoke($x){ echo "__invoke called with parameter " . $x . "\n"; } public function __call($name, $arguments){ echo "Calling " . $name . " with parameters: " . implode(', ', $arguments) . "\n"; } public static function __callStatic($name, $arguments){ echo "Static calling " . $name . " with parameters: " . implode(', ', $arguments) . "\n"; }
    查看全部
    0 采集 收起 来源:课程总结

    2018-03-22

  • 对不可访问属性调用isset()和empty()时,会触发__isset()魔术方法,注意isset和empty不是相反的关系,isset判断的是值是否被定义过,empty认为没定义过的返回true
    查看全部
  • 既然类可以实现,为什么还要用接口? 接口是一种标准,简单说,比如有个说话的函数/方法,有些人用say(),有些人用shuo(),有些人用其他的,这可不行,这时候定义一个接口,所有人都得用同一个写法
    查看全部
  • $this是php中的伪变量,可以通过其访问对象的属性及方法
    查看全部
  • Object Oriented
    查看全部
  • 我非常熟悉面向对象!
    查看全部
  • clone 可以克隆一个属性完全相同的一个新对象。例: $james = new NbaPlayer(); $james->name = 'James'; $james2 = clone $james; echo $james2->name; 如果类里实现了__colne()方法,则在调用clone方法时,会调用__clone方法。例:
    查看全部
  • 当对不可访问的属性调用unset()时,__unset()会被调用
    查看全部
  • __isset($name); //当对不可访问属性调用isset()或empty()方法时被调用
    查看全部
  • __set(); //在给不可访问属性赋值时被调用
    查看全部

举报

0/150
提交
取消
课程须知
1、本门课程是立志想成为优秀程序员的必修课 2、基本概念部分适合所有人学习 3、实践部分则需要有基本的PHP知识,这样会更加有利于你对面向对象的理解和掌握
老师告诉你能学到什么?
1、面向对象的基本概念 2、面向对象的基本思路 3、面向对象的基本原则 4、类的概念和PHP实践 5、继承的概念和案例实践 6、接口的概念和案例实践 7、多态的概念和案例实践 8、PHP中的魔术方法基本实践
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!