学习oop知识之面向对象

学习要点: 1.什么是面向对象 2.OOP的特点 3.关键的 OOP概念 4.创建 OO

 

Object /对象 Oriented 面向 /Programming 程序

许多语言本身就是面向对象( OOP)的,而PHP用了几年才引入了这类功能。面向对象的诞生是开发范型一次的重大改变,编程的注意力重新从应用程序的逻辑回到其数据上来。换句话说, OOP将焦点从编程的过程性事件转向最终建模的真实实体。这使得应用程序更接近于我们周围的现实世界。

 

一、 什么是面向对象

l 面向过程

这就好比你是公司的一名员工, 今天有个任务要在公司组装一批电脑。那么你就

开始采购、 讨价还价、 运输回公司、 开始组装、 布线网络、 调试机器、 完成。 也就是说, 面向过程就是具体化的实现,细节明确。

 

l 面向对象

这就好像你是公司的总裁, 你布置给一名员工一个组装一批电脑的任务。 完毕。

也就是说, 面向对象就是抽象化的执行, 具体还是由那名员工来完成。 而细节方面, 总裁不需要去考虑。 这样的好处是显而易见的, 在有管理高层的公司可以协调作业, 而没有管理高层的公司,只有一些具体实现功能的员工,会乱做一团。

 

二、OOP的特点

封装 隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访

问级别;将抽象得到的数据和行为(或功能)相结合,形成 一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。

 

主机箱将主板、CPU、内存、显卡封装起来,留出一个接口连接显示器、音响等

 

继承

继承是从一个基类得到一个或多个类的机制。 继承自另一个类的类被称为该类的子类。这种关系通常用父亲和孩子来比喻。子类

将继承父类的特性。 这些特性由属性和方法组成。 子类可以增加父类之外的新功能, 因此子类也被称为父类的“ 扩展”。

 

父亲的爱好钓鱼,儿子不喜欢可以不继承;

父亲的老婆是父亲的私有财产,儿子不可以继承;

儿子是父亲的子类,子类有自己的东西,有继承的东西,有些东西可以继承,有些东西不可以继承;

 

多态

多态是指OOP能够根据使用类的上下文来重新定义或改变类的性质或行为,或者说接口的多种不同的实现方式即为多态。把不同的子类对象都当作父类来看, 可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

 

剪是一种方法,不同的人去剪有不同的动作不同的行为;

 

程序还没有达到一定的水平,继承和多态用的不多;

 

三、关键的OOP概念

类( class) 类是对某个对象的定义。 它包含有关对象动作方式的信息, 包括它的名称、 方

法、 属性和事件。 实际上它本身并不是对象, 因为它不存在于内存中。 当引用类的

代码运行时, 类的一个新的实例, 即对象, 就在内存中创建了。 虽然只有一个类,

但能从这个类在内存中创建多个相同类型的对象。 对象( object) 对象是一件事、 一个实体、 一个名词, 可以获得的东西, 可以想象有自己的标

识的任何东西。对象是类的实例化。一些对象是活的,一些对象不是。 比如这辆汽车、这个人、这间房子、这张桌子、这株植物、这张支票、这件雨衣。

概括来说就是: 一切皆对象。 例如:类是对象的抽象定义,说白了,如果这个对象是电脑,类可以创建出许多对

象,类可以生成很多电脑,再白一点,类可以当成一个电脑生产厂,可以生成出很多很

多台电脑。

 

 

字段( filed) 字段是用于描述类的某方面的性质,它与一般的PHP变量非常相似,只是有一些

细微的差别。 例如:电脑品牌,电脑的型号等特性。

属性( attribute) 通过方法来访问和操作字段, 一方面可以保护字段, 同时还允许访问公共字段一

样访问数据。 例如:获取电脑品牌,设置电脑品牌等操作。

 

方法( method)

方法与函数非常相似, 只不过方法是用来定义类的行为。 与函数一样, 方法可

以接受输入参数,可以向调用者返回一个值。

例如:打开电脑,输入文本,运行程序。

四、创建OOP

类的创建、对象的声明;

 

new Computer()在堆中运行;$computer1在栈中运行;$computer指向的是堆的地址;

【参看demo1.php】

<?php

//怎样去创建类,格式:修饰符class 类名 {}

//我们去创建一个电脑的类,这类可以创建出对象(生产出电脑)

 

class Computer{ //类名第一个字母大写

 

}

 

//创建一台电脑出来,也就是对象的声明

//格式,变量 = new 类名()

 

//new Computer()表示实例化的过程(意思就是创建一个对象)

//$computer1 = new Computer()这个过程就是把实例化对象的地址赋给$computer1

//$computer1我们就可以称作为对象的应用

$computer1 = new Computer(); //这是我们创建的第一台电脑

//$computer2 = new Computer(); //这是我们创建的第二台电脑

 

//如果希望$computer2在栈中也是指向堆中的new Computer()

$computer2 = $computer1;

 

echo var_dump($computer1);

echo "<br>";

echo var_dump($computer2);

?>

 

继续分析:又一个New Computer()在堆中运行;两个互相不影响;

 

 

 

$computer1 = new Computer(); //这是我们创建的第一台电脑

//如果希望$computer2在栈中也是指向堆中的new Computer()

$computer2 = $computer1;

 

 

 

字段(成员)的添加

 

 

 

【参看demo2.php】

<meta charset="utf-8">

<?php

class Computer{

//字段成员的声明格式,修饰符 变量名 [=xxx];

/*

public $_name = '联想';//public表示公有,类外可以访问;

public $_model = 'i7';

 

一般在类中不直接设定值

*/

public $_name;

public $_model;

}

 

//创建一个对象,生产出一台电脑 ->表示指向

$computer1 = new Computer();

/*

echo $computer1->_name;

echo $computer1->_model;

echo '<br/>';

 

$computer1->_name = 'dell';

echo $computer1->_name;

*/

 

//给成员字段赋值

$computer1->_name = '联想';

//取值

echo $computer1->_name;

?>

 

 

 

方法的创建

【参看demo3.php】

<meta charset="utf-8">

<?php

class Computer{

public $_name;

public $_model;

 

//创建方法的格式,修饰符function 方法名(){}

//如果不加修饰符,默认就是public

public function _run(){

echo '我是运行的方法';

}

 

}

 

//创建一个对象,生产出一台电脑->表示指向

$computer1 = new Computer();

$computer1->_run(); //注意:前面不加$

?>

 

 

 

【参看demo4.php】

<meta charset="utf-8">

<?php

class Computer{

 

public $_name;

public $_model;

}

 

$computer1 = new Computer();

 

$computer1->_name = '联想';

//echo $computer1->_name;

 

$computer2 = new Computer();

echo $computer2->_name;

//发现$computer2打印不出联想

//因为参看堆内存发现new Computer()里面没有_name联想

 

 

$computer2 = $computer1;

//将$computer1的指向赋值给$computer2即可;

echo $computer2->_name;

?>

 

 

【参看demo5.php】

<meta charset="utf-8">

<?php

class Computer{

 

public $_name;

public $_model;

 

public function _run($_who){ //传参的方法

echo $_who.'我是运行的方法';

}

}

 

$computer1 = new Computer();

$computer1->_run('Lee');

?>

 

 

构造方法

【参看demo6.php】

<meta charset="utf-8">

<?php

class Computer{

 

//创建一个构造方法

public function Computer(){

echo '我是构造方法';

}

/*

public function Computer123(){

echo '我是普通方法';

}

*/

}

 

//$computer = new Computer();

//只要实例化,就可以运行构造方法

new Computer();

//其实new Computer就已经调用Computer()方法了;

 

//$computer->Computer123();

?>

 

 

 

 

【参看demo7.php】

<meta charset="utf-8">

<?php

class Computer{

//我要创建一个构造方法

public function __construct(){

echo '我是比较先进的构造方法';

}

}

 

new Computer();

?>

 

 

 

 

析构方法

【参看demo8.php】

<meta charset="utf-8">

<?php

class Computer{

 

//我要创建一个构造方法

public function __construct(){

echo '我是比较先进的构造方法';

}

 

//析构方法

public function __destruct(){

echo '我是析构方法';

}

 

//普通方法

public function _run(){

echo '我是普通方法';

}

}

 

$computer = new Computer();

$computer->_run();

?>

 

“我是析构方法”始终显示在最后面;因为析构方法在类全部用完之后再执行;

转载于:https://www.cnblogs.com/hcrk/p/10782900.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值