객체 지향은 PHP 학습에 없어서는 안될 부분입니다. 많은 친구들이 객체 지향에 대한 지식이 거의 없습니다. 따라서 많은 친구들이 회사에 면접을 갈 때 객체 지향 질문에 어떻게 대답해야 할지 모릅니다. 좋습니다. 이전 기사에서는 PHP 인터뷰 질문, 필기 테스트 질문 및 PHP 핵심 기술 질문도 소개했습니다. 오늘은 이 PHP 인터뷰 질문에 나오는 객체 지향 질문이 무엇인지 살펴보겠습니다.
public: 공개, 어디서나 액세스 가능
protected: 상속, 가능만 가능 이 클래스 또는 하위 클래스에서 액세스할 수 있으며 다른 곳에서는 액세스할 수 없습니다
private: private, 이 클래스에서만 액세스할 수 있으며 다른 곳에서는 액세스할 수 없습니다
<?php class Mysql { private static $instance = null; private $conn; // 构造方法,设置为private,不允许通过new获得对象实例 private function construct(argument) { $conn = mysql_connect("localhost","root","root"); } // 获取实例方法 public function getInstance() { if (!self::$instance instanceof self) { self::$instance = new self; } return self::$instance; } // 禁止克隆 private function clone(){} } // 获得对象 $db = Mysql::getInstance(); ?>
<?php class a { protected $c; public function a() { $this->c = 10; } } class b extends a { public function print_data() { return $this->c; } } $b = new b(); echo $b->print_data(); ?>
출력 결과 10
sleep code> serialize가 호출되기 전에 <code>sleep
serialize 之前被调用wakeup
unserialize 时被调用toString
打印一个对象时被调用set_state
调用 var_export 时被调用,用set_state
的返回值作为 var_export 的返回值construct
构造函数,实例化对象时被调用destruct
析构函数,当对象销毁时被调用call
对象调用某个方法,若存在该方法,则直接调用,若不存在,则调用call
函数get
读取一个对象属性时,若属性存在,则直接返回,若不存在,则调用get
函数set
设置一个对象的属性时,若属性存在,则直接赋值,若不存在,则调用set
函数isset
检测一个对象的属性是否存在时被调用unset
unset 一个对象的属性时被调用clone
克隆对象时被调用autoload
实例化一个对象时,如果对应的类不存在,则该方法被调用
构造函数:construct
析构函数:destruct
wakeup
이 호출됩니다. unserialize가 호출될 때
toString
이 호출됩니다. 객체를 인쇄할 때 set_state
가 호출되고 var_export가 호출될 때, set_state
의 반환값 사용 이 값은 var_export construct
생성자 , 개체를 인스턴스화할 때 호출됨
destruct
소멸자, 개체가 파괴될 때 호출됨call
개체가 메서드를 호출합니다. 메소드가 존재하면 직접 호출됩니다. 존재하지 않으면 객체 속성을 읽을 때 call
함수get
를 호출합니다. 존재하지 않으면 get
함수가 호출됩니다.set
객체의 속성을 설정할 때 속성이 존재하면 값이 직접 할당됩니다. 존재하지 않으면 set
함수가 호출됩니다. isset
는 객체를 감지합니다. 객체의 속성이 존재할 때 호출됩니다.unset
Unset이 호출됩니다. 객체의 속성이 호출될 때clone
객체가 복제될 때 호출됩니다autoload
객체를 인스턴스화합니다 객체, 해당 클래스가 없으면 이 메서드가 호출됩니다Constructor: construct
<?php class test{ function Get_test($num){ $num = md5(md5($num)."En"); return $num; } } $testObject = new test(); $encryption = $testObject->Get_test("itcast"); echo $encryption; ?>
class myclass{};관련 질문: 메서드와 속성 없이 "myclass"라는 클래스를 선언하는 방법 ?
$obj= new myclass();
8. 클래스 내에서 클래스의 속성에 어떻게 액세스하고 설정하나요?(Yahoo)
사용 구문: $this->propertyName, 예:
<?php class mycalss{ private $propertyName; public function construct() { $this->propertyName = "value"; } } ?>
<?php class Foo{ ?> <?php function bar(){ print "bar"; } } ?>A는 작동합니다. 클래스 정의는 여러 PHP 블록으로 분할될 수 있습니다.
답변: B10. 클래스의 속성을 직렬화하여 세션에 저장할 수 있으므로 나중에 전체 클래스를 복원할 수 있습니다. 그리고 사용되는 기능은 다음과 같습니다.
serialize() 및 unserialize()
<?php class A{ function disName(){ echo "Picachu"; } } class B extends A{ var $tmp; function disName(){ echo "Doraemon"; } } $cartoon = New B; $cartoon->disName(); ?>🎜A.tmp🎜 B. Picachu🎜C.D.Doraemon🎜E. 출력 없음🎜답변: D🎜🎜12. 🎜🎜🎜추상 클래스🎜는 인스턴스화할 수 없고 다른 클래스의 상위 클래스로만 사용할 수 있는 클래스입니다. 추상 클래스는 abstract 키워드를 통해 선언됩니다. 🎜추상 클래스는 모두 멤버 변수와 멤버 메서드를 포함합니다. 둘의 차이점은 추상 클래스에는 메서드 본문이 하나 이상 있어야 한다는 것입니다. 서브클래스별. 🎜추상 메소드의 형식은 다음과 같습니다: abstract function abstractMethod();🎜
接口是通过 interface 关键字来声明的,接口中的成员常量和方法都是 public 的,方法可以不写关键字 public,接口中的方法也是没有方法体。接口中的方法也天生就是要被子类实现的。
抽象类和接口实现的功能十分相似,最大的不同是接口能实现多继承。在应用中选择抽象类还是接口要看具体实现。
子类继承抽象类使用 extends,子类实现接口使用 implements。
类中的常量也就是成员常量,常量就是不会改变的量,是一个恒值。定义常量使用关键字 const,例如:const PI = 3.1415326;
无论是类内还是类外,常量的访问和变量是不一样的,常量不需要实例化对象,访问常量的格式都是类名加作用域操作符号(双冒号)来调用,即:类名:: 类常量名
。
使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。
当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行autoload()
函数。
这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后就执行 include 或者 require 来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。
A. MVC
B. 代理模式
C. 状态模式
D. 抽象工厂模式
E. 单件模式
答案:E
A. 1个
B. 2个
C. 取决于系统资源
D. 3个
E. 想要几个有几个
答案:A
<?php abstract class a{ function construct() { echo "a"; } } $a = new a(); ?>
A. a
B. 一个错误警告
C. 一个致命性的报错
答案:C 因为类a是抽象类,不能被实例化
<?php class a{ function construct(){ echo "echo class a something"; } } class b extends a{ function construct(){ echo "echo class b something"; } } $a = new b(); ?>
A. echo class a something echo class b something
B. echo class b something echo class a something
C. echo class a something
D. echo class b something
答案:D
类 b 继承自类 a,两个类都定义了构造函数,由于二者名字相同,所以子类中的构造函数覆盖了父类的构造函数,要想子类对象实例化时也执行父类的构造函数,需要在子类构造函数中使用 parent::construct()
来显示调用父类构造函数。
<?php class MyClass{ public static function justDoIt(){ } } ?>
是的
单例模式,工厂模式
单例模式 实现代码 见 第二题
总结:
我们在这个片文章中,我们主要给大家汇总了一下php面试题中关于面向对象中的一些常见面试问题,具体细节大家可以自己扩展,希望对你有所帮助!
相关推荐:
위 내용은 PHP 면접 질문의 객체지향 질문 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!