当前位置: 首页 > 编程日记 > 正文

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

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

一、总结

一句话总结:

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

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

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

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

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

function __construct($name,$sex,$age){
    echo "我是构造函数<br>";
    $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 "我是构造函数<br>";
$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

相关文章:

端口01 - 零基础入门学习汇编语言67

第十四章&#xff1a;端口01 让编程改变世界 Change the world by program 引言 CPU可以直接读写3 个地方的数据 &#xff08;1&#xff09;CPU 内部的寄存器&#xff1b; &#xff08;2&#xff09;内存单元&#xff1b; &#xff08;3&#xff09;端口。 这一章&#xff0c…

基于SSM实现二手交易系统

1、使用技术 SpringSpring MVCMybatisMysqlhtmljscss等 2、功能 用户注册用户登录物品推荐物品分类物品搜索物品发布物品详情购买商品我的主页等等 3、效果 4、视频介绍

RemoteFX原理简介

这几天&#xff0c;Windows 7 SP1的BETA版公开测试了&#xff0c;里面有一个功能&#xff0c;RemoteFX&#xff0c;算是softice比较期待的一个功能&#xff0c;总算是揭开了她的神秘面纱&#xff0c;横空出世&#xff0c;来到你身边。它的发布&#xff0c;对于微软桌面虚拟化解…

bzoj1079: [SCOI2008]着色方案(DP)

1079: [SCOI2008]着色方案 题目&#xff1a;传送门 题解&#xff1a; DP刚神多年前讲过的一道神题。 二话不说&#xff0c;上来就是一个六维数组&#xff1a;F[i][a][b][c][d][e]//表示上一次涂的颜色是还剩下i次可用的&#xff0c;a~e表示不同次数的颜色种数。 次数一样的颜色…

dedecms部分文章出现读取附加信息出错的解决办法

问题&#xff1a; 估计是新版本开发的时候&#xff0c;没有考虑旧版&#xff0c;文章内容为空的新闻&#xff0c;新版不在允许文章内容为空的新闻&#xff0c;这样旧版的内容为空的新闻升级后将无法再编辑。 解决&#xff1a;你可以对如下文件进行如下修改&#xff1a;article_…

程序员的周末:纯野的一天

牵强的标题自己写上这个标题都觉得挺牵强的。首先&#xff0c;我算不上是一个纯粹意义上的程序员了。虽然上了一个多月的班&#xff0c;但对于这份职业到底做什么我都还不是特别的清楚。每天做着一些类似文秘的工作&#xff0c;又类似技术支持的工作&#xff0c;还有点类似程序…

postgresql 分组查询第一条数据

SELECT * FROM ( SELECT ROW_NUMBER() OVER (partition BY k.word ORDER BY k."updatedAt" desc) rowId,* from keywords as k ) t WHERE rowId1

关于工作和生活

一、关于工作与生活 我有个有趣的观察&#xff0c;外企公司多的是25-35岁的白领&#xff0c;40岁以上的员工很少&#xff0c;二三十岁的外企员工是意气风发的&#xff0c;但外企公司40岁附近的经理人是很尴尬的。我见过的40岁附近的外企经理人大多在一直跳槽&#xff0c;最后大…

JVM GC 垃圾回收(二)之 判断那些可回收,怎么回收

1、哪些对象可回收&#xff1f; 可行性分析算法 通过一系列GC Roots&#xff08;1&#xff09;作为起始点&#xff0c;其到对象之间的引用&#xff08;2&#xff09;称为引用链&#xff0c;当对象到GC Roots之间不存在引用链相连&#xff0c; 则此对象是不可用的。如下&#xf…

nginx+lua实现上传文件到OSS

目录 技术点 openResty 下载安装 示例 oss.lua 文件 测试代码 text.lua nginx 配置 技术点 openResty OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台&#xff0c;其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并…

使用CEfSharp之旅(7)CEFSharp 拦截 http 请求 websocket 内容

使用CEfSharp之旅&#xff08;7&#xff09;CEFSharp 拦截 http 请求 websocket 内容 原文:使用CEfSharp之旅&#xff08;7&#xff09;CEFSharp 拦截 http 请求 websocket 内容版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。可点击关注博主 &…

sqlserver查询一个表的字段信息

select count(*) from syscolumns where idobject_id(表名) 转载于:https://www.cnblogs.com/dongpo888/archive/2011/05/11/2043370.html

ASP.NET无刷新客户端回调

首先说一下&#xff1a;Page.ClientScript 用于管理脚本、注册脚本和向页添加脚本。 返回结果:一个 System.Web.UI.ClientScriptManager 对象。 ClientScriptManager对象 是一些 在 Web 应用程序中定义用于管理客户端脚本的方法&#xff0c;其中有一个方法重载&#xff1a;stri…

common lisp里的几个操作符

setf 赋值操作符&#xff0c;定义一个全局变量。返回值是最后一个赋值的结果。 let 局部变量操作符。let表达式有两部分组成。第一部分是任意多的变量赋值&#xff0c;他们被包裹在一个()中&#xff0c;第二部分是任意数量的表示式作为 let 的函数体。let 表达式的返回值为 最…

敏捷宣言遵循的十二条原则

敏捷宣言遵循的十二条原则Twelve Principles behind the Agile Manifesto 我们遵循以下原则&#xff1a; We follow these principles: 我们最重要的目标&#xff0c;是通过持续不断地及早交付有价值的软件使客户满意。Our highest priority is to satisfy the customer throug…

微信公众号开发的一些配置

1、开发者ID&#xff08;AppID&#xff09; 开发者ID是公众号开发识别码&#xff0c;配合开发者密码可调用公众号的接口能力。 2、开发者密码&#xff08;AppSecret&#xff09; 开发者密码是校验公众号开发者身份的密码&#xff0c;具有极高的安全性。切记勿把密码直接交给第三…

javascript-对混合字母/数字数组进行排序

[A1, A10, A11, A12, A2, A3, A4, B10, B2, F1, F12, F3]将其排序为&#xff1a; [A1, A2, A3, A4, A10, A11, A12, B2, B10, F1, F3, F12] var reA /[^a-zA-Z]/g; var reN /[^0-9]/g;function sortAlphaNum(a, b) {var aA a.replace(reA, "");var bA b.replace…

国王验毒酒问题

国王召开宴会&#xff0c;一共有1000桶葡萄酒。邪恶的刺客在其中一桶酒里下了致命的毒。人们只知道有且仅有一桶酒被下毒&#xff0c;却不知道是哪一桶。现在你可以拿小白鼠做实验&#xff0c;小白鼠可以同时喝下多个桶的取样结果&#xff0c;且无视稀释效果喝到就死&#xff0…

Nodejs核心模块之net和http的使用详解

前言 net和http模块都是node核心模块之一&#xff0c;他们都可以搭建自己的服务端和客户端&#xff0c;以响应请求和发送请求。 net模块服务端/客户端 这里写的net模块是基于tcp协议的服务端和客户端&#xff0c;用到net.createServer和net.connect实现的一个简单请求与响应的d…

NODEJS 使用 XLSX模块导出excel文件

参考&#xff1a;https://www.itranslater.com/qa/details/2582439815438402560 生成excel /*** 用于排序* param a* param b* returns {number}*/ function sortAlphaNum(a, b) {let reA /[^a-zA-Z]/g;let reN /[^0-9]/g;let aA a.replace(reA, "");let bA b.re…

poj 3352

题意&#xff1a;一个连通的无向图&#xff0c;求至少需要添加几条边&#xff0c;救能保证删除任意一条边&#xff0c;图仍然是连通的。 思路&#xff1a;边的双连通图。其实就是要求至少添加几条边&#xff0c;可以使整个图成为一个边双连通图。用tarjan算法(求割点割边)求出l…

oracle删除大表的数据的方法

今天在公司中碰到访问表数据(test 表)速度非常慢&#xff0c;简单的一个select 语句花了10多分钟&#xff0c; 后来查询一下表的数据量&#xff0c;一共有278万多条数据&#xff0c;而且这个数据表的数据大都过期了&#xff0c;对于现在的业务没什么用。可悲的是这个表竟然也没…

ClickHouse 学习

DDL 添加数据库字段 alter table user_tags add column last_subject String; alter table user_tags add column class_trust_valids Int8; 删除列 ALTER TABLE [db].name [ON CLUSTER cluster] DROP COLUMN ... 日期函数 当toDate 遇到空的串报异常时 select toDate();…

zTree实现节点修改的实时刷新

一、应用场景 在实际应用中会遇到动态操作树各节点的需求&#xff0c;在增加树节点后如何实时动态刷新树就十分有必要了。二、项目实践 比如要在test1234节点下新建子节点&#xff0c;首先要选中test1234节点&#xff0c;添加成功后&#xff0c;根据test1234结点的TID去后台请求…

magento常用软件

常见问题&#xff1a; 1. 装完插件导致后台配置出现 Access denied 信息&#xff0c;需要重置账号权限&#xff0c;方可恢复正常。 2. 大多数无法安装插件时&#xff0c;请删除 /downloader/pearlib/pear.ini 文件&#xff0c;最后到 Connect Manager 里保存下设置&#…

连接惠普打印机(通过WIFI)

第一步 找到打印机型号 第二步 到惠普官方网站下载对应驱动 第三步 安装驱动 第四步 安装驱动后选择WIFI连接&#xff08;IP在打印机显示屏幕上显示&#xff0c;如果输入打印机屏幕IP连接失败&#xff1b;需要获取打印机真正的IP地址&#xff0c;在HP设备工具箱中获取&#xff…

ADO.NET的连接模式

1、连接模式&#xff1a;客户机一直保持和数据库服务器的链接&#xff0c;适合数据传输量少&#xff0c;系统规模不大、客户机和服务器在同一网络内的环境。 使用连接模式下数据访问的步骤如下&#xff1a; a、使用connection对象连接数据库 b、使用command&#xff08;命令&am…

App调用safar

/调用safar打开网页 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:"http://www.cnblogs.com/foxmin"]]; 调用app store (省略号后面加的是产品的id等一些参数) // [[UIApplication sharedApplication] openURL:[NSURL URLWithString:"i…

Spring Boot 整合Redis 实现缓存

本文提纲一、缓存的应用场景二、更新缓存的策略三、运行 springboot-mybatis-redis 工程案例四、springboot-mybatis-redis 工程代码配置详解运行环境&#xff1a;Mac OS 10.12.xJDK 8 Redis 3.2.8Spring Boot 1.5.1.RELEASE一、缓存的应用场景 什么是缓存&#xff1f;在互联网…

Sqlite3支持的数据类型 日期函数 Sqlite3 函数

Sqlite3支持的数据类型 NULL INTEGER REAL TEXT BLOB 但实际上&#xff0c;sqlite3也接受如下的数据类型&#xff1a; smallint 16 位元的整数。 interger 32 位元的整数。 decimal(p,s) p 精确值和 s 大小的十进位整数&#xff0c;精确值p是指全部有几个数(digits)大小值&…