当前位置: 首页 > 后端技术 > PHP

PHP面试手记(九)——PHP基础——面向对象考点

时间:2023-03-29 23:04:47 PHP

本文是在MOOCJason老师的课程基础上对PHP面试知识点的总结和升华。如有侵权,请联系我删除,邮箱:guoyugygy@163.com上一篇博文中,冷月分享了session控制的测试要点,其中Cookie和Session是重点。对于客户端和服务端的session管理,一定要多练习。今天冷月就给大家分享一下面向对象的考点。复习真题,请写PHP类权限控制修饰符答案:public:公共类型在类、子类、外部都可以访问protected:保护类型可以在类和子类中访问private:私有类型只能在子类中访问本考点分析主要考察php中类中的权限控制修饰符、面向对象特性、魔术方法、设计模式等考点面向对象的内容继承继承是子类自动共享数据结构的机制父类和方法是类之间的一种关系。在定义和实现类时,可以在已有类的基础上,将已有类定义的内容作为自己的内容,并增加一些新的内容。PHP中的类是单继承的,即一个类只能继承一个父类。方法重写子类继承父类后,可以重写父类的方法,即写一个与父类同名的方法进行覆盖。Final修饰的类方法不能被子类覆盖。也可以使用parent::methodname()来调用父类的方法。name();//output"iamxiaohuang"封装封装是指将对象的属性绑定到行为上,放在一个逻辑单元内。多态性多态性是指同一个函数或方法可以作用于多种类型的对象,得到不同的结果。不同的对象,接收到相同的消息会产生不同的结果,这种现象称为多态性。抽象类的定义任何类,如果其中至少有一个方法被声明为抽象的,那么这个类就必须被声明为抽象的。不能实例化定义为抽象的类。继承抽象类时,子类必须定义父类中的所有抽象方法;此外,这些方法的访问控制必须与父类中的相同(或更宽松)。比如抽象方法声明为protected,那么子类中实现的方法就应该声明为protected或者public,不能定义为private。getValue().PHP_EOL;}}classConcreteClass1extendsAbstractClass{protectedfunctiongetValue(){return"ConcreteClass1";}publicfunctionprefixValue($prefix){return"{$prefix}ConcreteClass1";}}classConcreteClass2extendsAbstractClass{publicfunctiongetValue(){return"ConcreteClass2";}publicfunctionprefixValue($prefix){return"{$prefix}ConcreteClass2";}}$class1=newConcreteClass1;$class1->printOut();echo$class1->prefixValue('FOO_')。PHP_EOL;$class2=newConcreteClass2;$class2->printOut();echo$class2->prefixValue('FOO_')。PHP_EOL;?>接口的定义使用接口(interface),可以指定一个类必须实现哪些方法,但不需要定义这些方法的具体内容。接口是用interface关键字定义的,就像定义一个标准类一样,但是里面定义的所有方法都是空的。接口中定义的所有方法都必须是公共的,这是接口的一个特性。要实现接口,请使用implements运算符。接口中定义的所有方法都必须在类中实现,否则会报致命错误。一个类可以实现多个接口,多个接口的名称用逗号隔开。vars[$name]=$var;}publicfunctiongetName($name){return$this->vars[$name];}}$my=newmyName();$my->setName('a','b');echo$my->getName('a');//b神奇的方法__construct()函数构造函数,在实例化一个类时自动执行__destruct()函数析构函数,析构函数会删除对一个对象的所有引用或在对象被显式销毁时执行。__call()函数调用一个对象中不可访问的方法,__call()被调用。__callStatic()函数__callStatic()在静态上下文中调用不可访问的方法时被调用。__get()在读取不可访问属性的值时调用。__set()为不可访问的属性赋值时,将调用__set()。__isset()__isset()在对不可访问的属性调用isset()或empty()时调用。__usset()__unset()在对不可访问的属性调用unset()时调用。__sleep()serialize()函数检查类中是否存在魔术方法__sleep()。如果存在,则先调用该方法,再进行序列化操作。__wakeup()unserialize()检查是否存在__wakeup方法。如果存在,则首先调用__wakeup方法,提前准备对象数据。__toString()__toString()的具体用途是当一个对象被当作字符串时触发这个魔术方法。__clone()当对象被克隆时,这个方法会被触发。设计模式工厂模式单例模式注册树模式Setter模式观察者模式策略模式多合一。请写出PHP的构造函数和析构函数答案