php oop面试题,PHP面试题 - 对面向对象的理解

具体的题目应该是:什么是面向对象?主要的特征是什么?当然还有很多类似的题目,如果你说一下你对面向对象的理解,或者是你对比一下面向过程等等,诸如此类吧?如果我来回答这个问题,我会从以下二个方面来回答。

一、从字面上

1、什么叫面向?

面向即看待。把我们所能客观看到的一切事物都抽象成一个对象。也就是所说的“万物皆对象”。其主要思想就是把构成问题的各个事物分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述一个事物在解决问题的过程中经历的步骤和行为。

通俗点:开发一套程序和装修一个房子一样,房子里电视、电脑、空调、冰箱;你都可以当做一个个实体,一个个对象。其实每个对象都有自己独特的功能职责,我们就是把每个独立的功能模块抽象成类,然后形成对象。一个系统会有大量的对象组成,这些对象之间都能够接收信息、处理数据和向其他对象发送信息等等相互作用。

2、什么是对象?

在我们PHP里对象是数据类型中的一种,整型、浮点、布尔、字符串又叫标量类型,标量相对复合类型而言,即是只能有一个值。数组作为复合类型能存储多种类型的值,但是当我要形容某一类的事物,且事物中又有很多种行为动作,那么就很难表现了。然后对象类型就应运而生。我们可以用对象来保存具体的叫什么名字、什么性别、会什么功夫的人。

总结:我们编写程序就是为了解决现实中的问题,而面向对象思想更符合人们处理较大项目的业务理解和代码开发。

二、从三大特性上对比面向过程、顺序编程

1、封装

封装可不是像函数那样的代码封装。封装更主要是将一个类的实现和使用进行分开,只保留部分属性和方法给开发人员使用。于是开发人员只需要关注这个类如何使用,而不用去关心具体的实现过程。而封装主要也有三个访问控制符来体现:public(公开的)、protected(受保护的)、private(私有的),同时也体现了安全性

2、继承

子类继承了父类,便自动继承了父类中所有的(public、protected)属性和方法。抽象类的存在就是为了继承,抽象类的定义往往就是提取了子类的公共属性和功能方法,以便子类继承使用。框架中(thinkphp5)的控制器、模型,定义时若继承了控制器基类、模型基类,便拥有了类似视图渲染、页面跳转、修改器、软删除等等功能。继承体现了代码的复用性或重用性

3、多态

子类继承了来自父类中的成员属性和方法。并多其方法进行实现(抽象、接口)或重写,于是多个子类中都具有相同的方法,但是却有了不同形态、不同结果的体现。多态增强了代码的灵活性和扩展性

代码参考

##### 面向顺序

$a = 20;

$b = 30;

$total = $a + $b;

##### 面向过程

function jia($one,$two){

return $one + $two;

}

$a = 20;

$b = 30;

$total = jia($a,$b);

##### 面向对象

class Jsq

{

protected $first;

protected $second;

protected $operator;

public function __construct($firstNumber,$secondNumber,$operator)

{

$this->first = $firstNumber;

$this->second = $secondNumber;

$this->operator = $operator;

switch ($this->operator){

case '+':

return $this->jia();

break;

}

}

protected function jia()

{

return $this->first + $this->second;

}

}

推荐阅读

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371640.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NOIP2014自测(晚自习两节+上午两节 共5个小时)

昨天刚刚考完试然后就翘晚自习跟今天上午两节课的语文和英语做做noip2014的题目。然后去评测了一番。首先day1day2的t1基本都是模拟&#xff0c;一看就出思路那种&#xff0c;直接ac掉。代码如下 day1t1&#xff1a;#include<iostream>#define maxn 209using namespace s…

您在eXo平台上的第一个Juzu Portlet

菊珠是佛教的佛珠。 一句话&#xff0c;我相信您已经学到了什么&#xff0c;印象深刻吗&#xff1f; 好的&#xff0c;我在这里不谈论佛教。 Juzu还是一个用于快速开发Portlet&#xff08;以及即将推出的独立应用程序&#xff09;的新框架。 您可以在Juzu网站上找到所需的所有…

Spring注入方式及注解配置

一&#xff1a;基于xml的DI&#xff08;Dependency Injection&#xff09; 注入类型&#xff1a; 定义学生Student实体类和小汽车Car实体类&#xff1a;进行封装和生成ToString(),并自定义属性Car Student 123456789101112131415161718192021222324252627282930313233343536373…

java 切面 不执行,解决springboot的aop切面不起作用问题(失效的排查)

检查下springboot的启动类是否开启扫描springbootapplicationcomponentscan(basepackages {"com.zhangpu.springboot"})另外springboot默认开启的enableaspectjautoproxy为true如果不放心可以增加&#xff1a;enableaspectjautoproxy(proxytargetclasstrue)第二种可…

修改readonly属性的值

一般情况下&#xff0c;readonly属性的值是无法修改的&#xff0c;但可以通过特殊方式修改。定义一个student的类&#xff0c;其中name属性为readonly类型的变量 interface JFStudent : NSObjectproperty(nonatomic,copy,readonly) NSString *hisName;property(nonatomic,copy)…

VisualVM:通过SSH监视远程JVM(是否为JMX)

VisualVM是用于监视JVM&#xff08;5.0&#xff09;的有关内存使用情况&#xff0c;线程&#xff0c;GC&#xff0c;MBeans等的出色工具。让我们看看如何通过SSH使用它来监视&#xff08;甚至使用JMX对其进行采样&#xff0c;对带有JMX的远程JVM进行监视&#xff09;它。 这篇文…

h5 php js实验总结,H5学习_番外篇_PHP数据库操作

1. 文件操作1.1 打开关闭文件fopen()resource fopen ( string filename, string mode [, bool use_include_path [, resource zcontext]] )?fopen()函数将resource绑定到一个流或句柄。绑定之后&#xff0c;脚本就可以通过句柄与此资源交互;例1:以只读方式打开一个位于本地服务…

ReactNative开发环境

此内容根据徐赢老师的文档整理后写处 原版地址&#xff1a;https://tuomaxu.gitbooks.io/reactnative/content/ ReactNative是跨平开发的解决方案&#xff0c;在开发平台的选择上&#xff0c;mac平台和win平台都可以。 所需要工具如下&#xff1a; 1&#xff0c;Nodejs环境 2&a…

Python自动化开发 - 字符串, 列表, 元组, 字典和和文件操作

一、字符串特性&#xff1a;字符串本身不可修改&#xff0c;除非字符串变量重新赋值。Python3中所有字符串都是Unicode字符串&#xff0c;支持中文。 >>> name "Jonathan" >>> name "Jonathan" "Ni" >>>print(na…

shiro java配置,InI 配置 - 跟我学 Apache Shiro_教程_Java开发社区

INI 配置之前章节我们已经接触过一些 INI 配置规则了&#xff0c;如果大家使用过如 Spring 之类的 IoC/DI 容器的话&#xff0c;Shiro 提供的 INI 配置也是非常类似的&#xff0c;即可以理解为是一个 IoC/DI 容器&#xff0c;但是区别在于它从一个根对象 securityManager 开始。…

在Spring容器外部连接对象依赖项

有几种有趣的方法可以设置在Spring容器外部实例化的对象的属性和依赖关系。 用例首先&#xff0c;为什么我们需要在Spring容器之外进行依赖注入–我知道三个用例&#xff0c;其中我实例化了Spring容器之外的对象并需要注入依赖。 首先考虑使用Spring TaskExecutor执行一系列任…

前端学习路线汇总

https://123.w3cschool.cn/plk2fihttps://www.w3cschool.cn/nodejs/nodejs-global-object.htmlnode.js转载于:https://www.cnblogs.com/sxz2008/p/7238773.html

MediaInfo源代码分析 1:整体结构

博客地址&#xff1a;http://blog.csdn.net/leixiaohua1020/article/details/12016231 MediaInfo源代码分析系列文章列表&#xff1a; MediaInfo源代码分析 1&#xff1a;整体结构MediaInfo源代码分析 2&#xff1a;API函数MediaInfo源代码分析 3&#xff1a;Open()函数MediaI…

测试RESTful服务的客户端

开发使用RESTful Web API的应用程序可能意味着开发服务器和客户端。 为服务器端编写集成测试可以像使用Arquillian来启动服务器一样容易&#xff0c;并且可以通过REST确保测试服务是否按预期工作。 问题是如何测试客户端。 在本文中&#xff0c;我们将了解如何使用模拟来测试客…

linux mysql误删,linux下MySQL安装与删除 (Ubuntu)

1、MySQL安装A)MySQL安装&#xff1a; sudo apt-get install mysql-server mysql-clientB)启动/停止MySQL服务&#xff1a;MySQL 在安装以后&#xff0c;MySQL 就已经启动&#xff1b;如果需要手动启动或停止则如下操作&#xff1a;手动启动服务&#xff1a; sudo start mysql手…

对多态的理解例子

public class A {public String show(D obj) {return ("A and D");}public String show(A obj) {return ("A and A");} }class B extends A{public String show(B obj){ //重载return ("B and B");}public String show(A obj){ //重写show(A obj…

【Java每日一题】20170120

20170119问题解析请点击今日问题下方的“【Java每日一题】20170120”查看&#xff08;问题解析在公众号首发&#xff0c;公众号ID&#xff1a;weknow619&#xff09; package Jan2017; import java.util.Arrays; import java.util.List; public class Ques0120 { publ…

使用NoSQL实现实体服务–第2部分:合同优先

现在该开始使用NoSQL项目对SOA实体服务进行编码了&#xff0c;并且正如我所承诺的&#xff0c;我将从Web服务的合同开始。 看一下本系列的第1部分 。 这种从Web服务合同定义开始的技术是面向服务的体系结构实现的“合同优先”方法的核心&#xff0c;并具有许多技术优势&#xf…

php hugepage,【原创】解决Redis启动报错:Transparent Huge Pages (THP) support enabled in your kernel...

问题背景Redis启动报错&#xff1a;WARNING you have Transparent Huge Pages (THP) support enabled in your kernel.This will create latency and memory usage issues with Redis.To fix this issue run the command echo never > /sys/kernel/mm/transparent_hugepage/…

hibernate cascade的真正含义

hibernate cascade 是 OneToOne OneToMany ManyToOne ManyToMany等注解的属性&#xff0c;表示级联操作。 /*** (Optional) The operations that must be cascaded to* the target of the association.** <p> By default no operations are cascaded.*/CascadeType[] cas…