首页 > php开发面试题---php面向对象详解(对象的主要三个特性)

php开发面试题---php面向对象详解(对象的主要三个特性)

php开发面试题---php面向对象详解(对象的主要三个特性)

一、总结

一句话总结:

对象的行为:可以对 对象施加那些操作,开灯,关灯就是行为。
对象的形态:当施加那些方法是对象如何响应,颜色,尺寸,外型。
对象的表示:对象的表示就相当于身份证,具体区分在相同的行为与状态下有什么不同。

 

1、php查看对象属性的符号?

->:$this->name=$name;

 

2、php中构造函数如何写?

function __construct($name,$sex,$age){}

function __construct($name,$sex,$age){

    echo "我是构造函数
";

    $this->name=$name;

    $this->sex=$sex;

    $this->age=$age;

}

 

 

3、php面向对象访问权限有哪三种?

public 公共的(公共修饰符) 类内部与类外部都可以访问的
private 私有的(私有修饰符) 只能在类内部访问
protected 受保护的(保护成员修饰符) 子类可以访问 类外部不可以访问

 

4、oop的三个重要特性?

封装,继承,多态

封装性:封装性就是把对象的属性和行为结合成一个独立的单位。

封装一个类需要两步 第一步是私有化一个类 第二步是用set和get 做出读取赋值的操作

他的好处是:隐藏类的实现细节,可以方便加入逻辑控制性,限制对属性的不合理操作,便于修改增强代码的可维护性。

 

5、封装性的定义,使用和好处是什么?

封装性:封装性就是把对象的属性和行为结合成一个独立的单位。
封装一个类需要两步 第一步是私有化一个类 第二步是用set和get 做出读取赋值的操作
他的好处是:隐藏类的实现细节,可以方便加入逻辑控制性,限制对属性的不合理操作,便于修改增强代码的可维护性。

 

6、php的面向对象中的get和set函数是什么?

__get与__set

一般说把类私有话更符合现实的逻辑。

预定义两种函数来进行获取与敷值操作。

__get 获取值通常是域的值

__set 设置值通常是域的值

__call 调用一个对象中不存在的方法时,就会产生错误call()这个方法来处理这种情况。

 

7、php中如何声明和使用静态方法?

static关键字 来声明静态方法
类内部访问:用self:self::$静态属性、self::静态方法
类外部访问:用类名:echo ClassName::CONSTANT;//类外部访问

 

8、php中继承的关键字是什么?

extends:语法格式:class B extends A 此范例指明 B继承了A

 

9、php中的多态性是什么?

同一种方法在子类与父类中执行的结果不同
多态性是指在父类中定义的属性或行为被子类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或行为在父类及其各个子类中具有不同的语义。
就是说同一种方法在子类与父类中执行的结果不同。
class A {
function info(){
echo “A INFO”;
}
}
class B extends A {
function info(){
echo “B INFO”;
}
}
class C extends A {
function info(){
echo “C INFO”;
}
}
function printinfo($obj){
function printinfo(A $obj){
if($obj instanceof A)
$obj->info();
$obj->info();
}
}
$a=new A(); $b=new B(); $c=new C();
printinfo($a); //输出A INFO
printinfo($b); //输出B INFO
printinfo($c); //输出C INFO

 

 

10、php中的抽象类和抽象方法怎么写?

abstract关键词:在class前加上或者在function前面加上

abstract class Person{

public $name;

abstract function getInfo();

}

 

11、php中继承接口的关键词是什么?

implements:比如class D implements B,C{}
interface A{ function a();}
interface B{ function b();}
interface C extends A{ function c();}
class D implements B,C{function a(){}function b(){}function c(){}
}

 

 

12、php中接口的写法和注意?

接口只能声明常量和抽象方法(方法默认是抽象的)
interface PCI{}
interface PCI{const TYPE="PCI";//public $name; errorfunction start();function stop();
}

 

 

 

 

二、php-------面向对象详解

参考:php-------面向对象详解

https://www.cnblogs.com/yuyu1993/p/5566493.html

                                               php面向对象详解

 

面向对象 对象概念是面向对象技术的核心。在显示世界里我们所面对的事情都是对象,如计算机、电视机、自行车等。在面向对象的程序设计中,对象是一个由信息及对信息进行处理的描述所组成的整体,是对现实世界的抽象. 对象的主要三个特性 对象的行为:可以对

 

面向对象 对象概念是面向对象技术的核心。在显示世界里我们所面对的事情都是对象,如计算机、电视机、自行车等。在面向对象的程序设计中,对象是一个由信息及对信息进行处理的描述所组成的整体,是对现实世界的抽象.

对象的主要三个特性

对象的行为:可以对 对象施加那些操作,开灯,关灯就是行为。

对象的形态:当施加那些方法是对象如何响应,颜色,尺寸,外型。

对象的表示:对象的表示就相当于身份证,具体区分在相同的行为与状态下有什么不同。

面向对象模型

面向对象的概念:

oop(面向对象的编程)它能是其代码更加简洁易于维护并且具有更强的可重性

什么是类:

类是具有相同属性和服务的一组对象的集合比如说人,书,轮船,车都属于类,他为属于该类的对象做了一个统一的抽象描述,在编程的语言中类是一个单独的程序,它应该有一个类名包括属性的说明和服务两个部分。

什么是对象:

对象是系统中描述客观事件的一个实体,他是构成系统的一个基本单位。*数据与代码都被捆绑在一个实体当中*,一个对象由一组属性和对这组属性进行操作的一组行为组成。

从抽象的角度来说,对象是问题域或实现域中某些事物的一个抽象。他反映该事物在系统中保存的信息和发挥的作用:它是一组属性和有权对这些属性进行操作的一个封装体。客观世界是由对象和对象之间的联系组成的。

类和对象的关系:

类与对象的关系就如模具和铸件的关系,类的实力化的结果就是对象,而对对象的抽象就是类,类描述了一组有相同特性(属性)和相同行为的对象。

类与属性和方法

PHP中定义类语法格式:

class classname [可选属性]{

public $property [=value];… //用public声明一个公共标识 然后给予一个变量 变量也可以赋值

function functionname ( args ){ //类的方法里的成员函数

代码} …

//类的方法(成员函数)

}

生成对象(类的实例化): $对象名=new classname( );

使用对象的属性

在一个类中,可以访问一个特殊指针$this当在该类中通过一个操作设置或访问该变量时,使用$this->name来引用.



对象的生成

定义好类后用一个new来声明,由于对象资料的封装特性,对象是无法由主程序区块直接访问的须通过对象来调用类中所定义的属性和行为函数,间接地达成存取控制类中资料的目的。



对象和类的关系

对象和类的关系:

对象是实际存在的,占有动态资源。

类是对象的蓝图,可能占有静态资源。

对象属性占有动态资源

类(静态)属性实际上是有类名字空间上的“全局变量”

性能考虑:

每个对象要单独占用数据空间

增加的调用层次可能消耗执行时间

方法的参数形式和传递方式

方法的参数可以是基本数据类型、数组和类对象。

基本数据类型:值参传递

数组:值参传递

类对象:引用传递



构造函数

构造函数是在类中起到初始化的作用

构造函数的生成方法与其他函数一样只是其名称必须是__construct().

语法格式:function __construct(参数){

。。。。。。。。

}

范例:

class Person{

public $name;

public $sex;

public $age;

function __construct($name,$sex,$age){

echo "我是构造函数
";


$this->name=$name;

$this->sex=$sex;

$this->age=$age;

}

输出结果:初始化



析构函数

当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。应在退出前在析构函数中用释放内存。

析构函数__destruct 析构函数没有任何参数

范例:

class person{

function _ _destruct( )

{ echo "bye bye !“; }

}

$a=new person();

 

访问类型

public 公共的(公共修饰符) 类内部与类外部都可以访问的

private 私有的(私有修饰符) 只能在类内部访问

protected 受保护的(保护成员修饰符) 子类可以访问 类外部不可以访问

 

oop的三个重要特性

封装,继承,多态

封装性:封装性就是把对象的属性和行为结合成一个独立的单位。

封装一个类需要两步 第一步是私有化一个类 第二步是用set和get 做出读取赋值的操作

他的好处是:隐藏类的实现细节,可以方便加入逻辑控制性,限制对属性的不合理操作,便于修改增强代码的可维护性。

 

__get与__set

一般说把类私有话更符合现实的逻辑。

预定义两种函数来进行获取与敷值操作。

__get 获取值通常是域的值

__set 设置值通常是域的值

__call 调用一个对象中不存在的方法时,就会产生错误call()这个方法来处理这种情况。

 

静态属性和方法

static关键字 来声明静态方法

static静态变量 在类的内部生成一个静态变量 就是能够被所有类的实力化共想 也就是说静态成员则放到了“初始化静态段”,在类第一次被加载的时候放入的,可以让堆内存里面的每个对象所共享

使用方法:self::$静态属性、self::静态方法

static function p(){

echo self::$country;

echo self::PI;//访问常量

//echo $this->name;在静态方法中只能操作静态属性

//self::p();

}

外部调用:类::$静态属性、类::静态方法

const关键字:用来生成常量 常量是唯一的不能改变的 惯例常量为大写

const CONSTANT = 'constant value'; 生成一个常量

echo self::CONSTANT;//类内部访问

echo ClassName::CONSTANT;//类外部访问

继承性

B类的对象拥有A类的全部属性与行为,称作B对A类的继承。

假如一个类从多个类中继承了属性与服务,这称为多继承,通常我们成为继承类为子类被继承类为父类,在PHP中只有单继承,但一个父类可以被多个类继承,但是一个子类只能有一个父类,但是允许关联继承,通过继承可以减化类的定义。

extende声明继承关系

语法格式:class B extends A 此范例指明 B继承了A

类的外部访问对子类是有效的

子类与父类的属性与方法

子类继承父类的所有内容,但父类中的private部分不能直接访问

子类中新增加的属性和方法是对父类的扩展

子类中定义的与父类同名的属性是对父类属性的覆盖,同名的方法也是对父类方法的覆盖

 

重写的方法

在子类中,使用parent访问父类中的被覆盖的属性和方法

parent::__construce();

parent::$name;

parent::fun();

覆盖父类原有属性

clone克窿对象 语法格式$c=clone $p; $c克窿的对象$p 输出echo $c->name;

对象比较

===两个比较运算符。

==是比较两个对象的内容。

===是比较对象的句柄,即引用地址。

instanceof操作符用于检测对象实力是否属于某一个类的类型 属于返回true 不属于返回false

__clone()如果想在克隆后改变原对象的内容,需要在__clone()中重写原本的属性和方法

function __clone(){

$this->name="我是一个克隆人";

}

final表示一个类是最终版本 也就是说它不能在被子类调用

 

 

多态性

多态性是指在父类中定义的属性或行为被子类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或行为在父类及其各个子类中具有不同的语义。

就是说同一种方法在子类与父类中执行的结果不同。

class A {

function info(){

echo “A INFO”;

}

}

class B extends A {

function info(){

echo “B INFO”;

}

}

class C extends A {

function info(){

echo “C INFO”;

}

}

function printinfo($obj){

function printinfo(A $obj){

if($obj instanceof A)

$obj->info();

$obj->info();

}

}

$a=new A(); $b=new B(); $c=new C();

printinfo($a); //输出A INFO

printinfo($b); //输出B INFO

printinfo($c); //输出C INFO

 

 

抽象方法和抽象类

抽象方法是作为子类摸版使用的。

abstract class Person{

public $name;

abstract function getInfo();

}

抽象类不能被实力话,一个抽象类中,必须有一个抽象方法。但是抽象类中可以定义动态函数。

 



接口

当一个类继承了一个接口之后,它要覆盖接口的所有方法,接口只能声明常量,接口的方法必须定义为共有否则无法继承,接口可以与多个接口间继承

语法:

interface PCI{

const TYPE="PCI";

//public $name; error

function start();

function stop();

}

接口中的方法可以声明为static

interface A{ function a();}

interface B{ function b();}

interface C extends A{ function c();}

class D implements B,C{

function a(){}

function b(){}

function c(){}

}

转载于:https://www.cnblogs.com/Renyi-Fan/p/10934920.html

更多相关:

  • 点云PCL免费知识星球,点云论文速读。文章:DSP-SLAM: Object Oriented SLAM with Deep Shape Priors作者:Jingwen Wang Martin Runz Lourdes Agapito编译:点云PCL代码:https://github.com/JingwenWang95/DSP-S...

  • RAM缓存 新RAM缓存算法(CLFUS) 新的RAM缓存使用的创意来自许多缓存替换策略和算法,包括LRU,LFU,CLOCK,GDFS及2Q,它被命名为时钟周期内最小频繁使用大小算法CLFUS(Clocked Least Frequently Used by Size)。它避开了任何专利算法,具有如下特性: 均衡最近性(Rec...

  • MP4 |视频:AVC,1280×720 30 fps |音频:AAC,48 KHz,2 Ch |时长:2h 12m 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:560M C4D是一个有抱负的运动图形艺术家和设计师的重要工具。借助C4D,您可以使用3D对象、动态效果和动画来增强运动图形、模型和可视化效果。本课...

  • 文章目录先说问题:再说解决尝试1:尝试2(该尝试建议先在自己环境搭配对应业务测试通过后再现场尝试): 感谢 学无止境996同学的陪伴和vigourtyy美丽女友的支持,直到这个解决问题的深夜 先说问题: ceph 12.2.1生产环境:3副本 tier + 3副本data 机房在拥有业务的情况下重启集群交换机,产生如下场景...

  • 这周主要学习了java中的类和对象的知识点,发现和C++中的类和对象极为相似,对于类和对象的概念理解起来也简单。同时在自学的过程中也把类的知识重新复习巩固了一下(如类的三大特征:继承,封装和多态,构造,成员对象的访问权限,构造,无参有参函数的调用等),同时也了解到一些新的概念,比如类对象创建和引用占据堆内存和栈内存,输出对象时默认调...

  • 来源:公众号|计算机视觉工坊(系投稿)作者:仲夏夜之星「3D视觉工坊」技术交流群已经成立,目前大约有12000人,方向主要涉及3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、...

  • 点云PCL免费知识星球,点云论文速读。文章:Real-Time LIDAR-Based Urban Road and Sidewalk Detection for Autonomous Vehicles作者:Ern˝o Horváth  , Claudiu Pozna ,and Miklós Unger编译:点云PCL代码:http...

  • 文章:Semantic Histogram Based Graph Matching for Real-Time Multi-Robot Global Localization in Large Scale Environment作者:Xiyue Guo, Junjie Hu, Junfeng Chen, Fuqin Deng, T...

  • 点云PCL免费知识星球,点云论文速读。文章:Robust Place Recognition using an Imaging Lidar作者:Tixiao Shan, Brendan Englot, Fabio Duarte, Carlo Ratti, and Daniela Rus编译:点云PCL(ICRA 2021)开源代码:...

  • 文章:A Survey of Calibration Methods for Optical See-Through Head-Mounted Displays作者:Jens Grubert , Yuta Itoh, Kenneth Moser编译:点云PCL本文仅做学术分享,如有侵权,请联系删除。欢迎各位加入免费知识星球,获取PD...

  • 原文出处: 韩昊    1 2 3 4 5 6 7 8 9 10 作 者:韩 昊 知 乎:Heinrich 微 博:@花生油工人 知乎专栏:与时间无关的故事   谨以此文献给大连海事大学的吴楠老师,柳晓鸣老师,王新年老师以及张晶泊老师。   转载的同学请保留上面这句话,谢谢。如果还能保留文章来源就更感激不尽了。 我保证这篇文章...

  • 原文出处: 韩昊   我保证这篇文章和你以前看过的所有文章都不同,这是 2012 年还在果壳的时候写的,但是当时没有来得及写完就出国了……于是拖了两年,嗯,我是拖延症患者…… 这篇文章的核心思想就是: 要让读者在不看任何数学公式的情况下理解傅里叶分析。 傅里叶分析不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维...

  • 很多Linux高手都喜欢使用screen命令,screen命令可以使你轻松地使用一个终端控制其他终端。尽管screen本身是一个非常有用的工具,byobu作为screen的增强版本,比screen更加好用而且美观,并且提供有用的信息和快捷的热键。 想象一下这样一个场景:你通过Secure Shell(ssh)链接到一个服务器,并...

  • NarrowbandPrimary Synchronization Signal时域位置每1个SFN存在一个NPSSSFNSubframeSymbol长度每个SFN5最后11个symbol11个symbols频域位置NB-IOT下行带宽固定180kHz,一个PRB,12个子载波。...

  •  [h1]反斜杠只能够阻止一个字符  [h2]位于键盘的左上角,和~公用一个键。...