0

0

php 面向对象基础

php中文网

php中文网

发布时间:2016-07-25 09:07:35

|

904人浏览过

|

来源于php中文网

原创

  1. class Person
  2. {
  3. //下面是人的成员属性
  4. var $name; //人的名子
  5. var $***; //人的性别
  6. var $age; //人的年龄
  7. //下面是人的成员方法
  8. function say() //这个人可以说话的方法
  9. {
  10. echo "这个人在说话";
  11. }
  12. function run() //这个人可以走路的方法
  13. {
  14. echo "这个人在走路";
  15. }
  16. }
  17. ?>
复制代码

3.5.如何实例化对象

上面说过php 面向对象程序的单位就是对象,但对象又是通过类的实例化出来的,既然我们类会声明了,下一步就是实例化对象了。当定义好类后,我们使用new关键字来生成一个对象。 $对象名称 = new  类名称(); 对象->属性 $p1->name; $p2->age; $p3->***; 对象->方法 $p1->say(); $p2->run();

5.7.特殊的引用“$this”的使用  现在我们知道了如何访问对象中的成员,是通过“对象 ->成员”的方式访问的,这是在对象的外部去访问对象中成员的形式,那么如果我想在对象的内部,让对象里的方法访问本对象的属性,或是对象中的方法 去调用本对象的其它方法这时我们怎么办?因为对象里面的所有的成员都要用对象来调用,包括对象的内部成员之间的调用,所以在PHP里面给我提供了一个本对 象的引用$this, 每个对象里面都有一个对象的引用$this来代表这个对象,完成对象内部成员的调用, this的本意就是“这个”的意思, 上面的实例里面,我们实例化三个实例对象$P1、 $P2、 $P3,这三个对象里面各自存在一个$this分别代表对象$p1、$p2、$p3 。

  1. class Person
  2. {
  3. //下面是人的成员属性
  4. var $name; //人的名子
  5. var $***; //人的性别
  6. var $age; //人的年龄
  7. //下面是人的成员方法
  8. function say() //这个人可以说话的方法
  9. {  echo "我的名子叫:".$this->name." 性别:".$this->***." 我的年龄是:".$this->age."
  10. ";
  11. }
复制代码

8.构造方法与析构方法 大多数类都有一种称为构造函数的特殊方法。当创建一个对象时,它将自动调用构造函数,也就是使用new这个关键字来实例化对象的时候自动调用构造方法。

   构造函数的声明与其它操作的声明一样,只是其名称必须是__construct( )。这是PHP5中的变化,以前的版本中,构造函数的名称必须与类名相同,这种在PHP5中仍然可以用,但现在以经很少有人用了,这样做的好处是可以使构 造函数独立于类名,当类名发生改变时不需要改相应的构造函数名称了。为了向下兼容,如果一个类中没有名为__construct( )的方法,PHP将搜索一个php4中的写法,与类名相同名的构造方法。   格式:function __construct ( [参数] ) { ... ... } 在一个类中只能声明一个构造方法,而是只有在每次创建对象的时候都会去调用一次构造方法,不能主动的调用这个方法,所以通常用它执行一些有用的初始化任务。比如对成属性在创建对象的时候赋初值。

  1. //创建一个人类
  2. class Person
  3. {
  4. //下面是人的成员属性
  5. var $name; //人的名子
  6. var $***; //人的性别
  7. var $age; //人的年龄
  8. //定义一个构造方法参数为姓名$name、性别$***和年龄$age
  9. function __construct($name, $***, $age)
  10. {
  11. //通过构造方法传进来的$name给成员属性$this->name赋初使值
  12. $this->name=$name;
  13. //通过构造方法传进来的$***给成员属性$this->***赋初使值
  14. $this->***=$***;
  15. //通过构造方法传进来的$age给成员属性$this->age赋初使值
  16. $this->age=$age;
  17. }
  18. //这个人的说话方法
  19. function say()
  20. {
  21. echo "我的名子叫:".$this->name." 性别:".$this->***." 我的年龄是:".$this->age."
  22. ";
  23. }
  24. }
  25. //通过构造方法创建3个对象$p1、p2、$p3,分别传入三个不同的实参为姓名、性别和年龄
  26. $p1=new Person(“张三”,”男”, 20);
  27. $p2=new Person(“李四”,”女”, 30);
  28. $p3=new Person(“王五”,”男”, 40);
  29. //下面访问$p1对象中的说话方法
  30. $p1->say();
  31. //下面访问$p2对象中的说话方法
  32. $p2->say();
  33. //下面访问$p3对象中的说话方法
  34. $p3->say();
  35. ?>
复制代码

输出结果为: 我的名子叫:张三 性别:男 我的年龄是:20 我的名子叫:李四 性别:女 我的年龄是:30 我的名子叫:王五 性别:男 我的年龄是:40

与构造函数相对的就是析构函数。析构函数是PHP5新添加的内容,在PHP4中没有析构函数。析构函数允许在销毁一个类之前执行的一些操作或完成一 些功能,比如说关闭文件,释放结果集等,析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行,也就是对象在内存中被销毁前调用析构函 数。与构造函数的名称类似,一个类的析构函数名称必须是__destruct( )。析构函数不能带有任何参数。  格式:function __destruct ( ) { ... ... }

  1. //创建一个人类
  2. class Person
  3. {
  4. //下面是人的成员属性
  5. var $name; //人的名子
  6. var $***; //人的性别
  7. var $age; //人的年龄
  8. //定义一个构造方法参数为姓名$name、性别$***和年龄$age
  9.   function __construct($name, $***, $age)

  10. {
  11. //通过构造方法传进来的$name给成员属性$this->name赋初使值
  12. $this->name=$name;
  13. //通过构造方法传进来的$***给成员属性$this->***赋初使值
  14. $this->***=$***;
  15. //通过构造方法传进来的$age给成员属性$this->age赋初使值
  16. $this->age=$age;
  17. }
  18. //这个人的说话方法
  19. function say()
  20. {
  21. echo "我的名子叫:".$this->name." 性别:".$this->***." 我的年龄是:".$this->age."
  22. ";
  23. }
  24. //这是一个析构函数,在对象销毁前调用
  25. function __destruct()
  26. {
  27. echo “再见”.$this->name.”
  28. ”;
  29.   }
复制代码

如果给类外部提供接口,可以为私有属性在类外部提供设置方法和获取方法,来操作私有属性.例如:prvate $age; //私有的属性年龄

  1. function setAge($age) //为外部提供一个公有设置年龄的方法
  2. {
  3. if($age130) //在给属性赋值的时候,为了避免非法值设置给属性
  4. return;
  5. $this->age=$age;
  6. }
  7. function getAge() //为外部提供一个公有获取年龄的方法
  8. {
  9. return($this->age);
  10. }
复制代码

上面的方法是为一个成员属性设置和获取值, 当然你也可以为每个属性用同样的方法对其进行赋值和取值的操作,完成在类外部的存取工作。 JAVABEAN是一样的!!!

10.__set() __get() __isset() __unset()四个方法的应用

   一般来说,总是把类的属性定义为private,这更符合现实的逻辑。但是, 对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数“__get()”和“__set()”来获取和赋值其属性,以及检查属性的 “__isset()”和删除属性的方法“__unset()”。 上一节中,我们为每个属性做了设置和获取的方法,在PHP5中给我们提供了专门 为属性设置值和获取值的方法,“__set()”和“__get()”这两个方法,这两个方法不是默认存在的, 而是我们手工添加到类里面去的,像构造方法(__construct())一样, 类里面添加了才会存在,可以按下面的方式来添加这两个方法,当然也可以按个人的风格来添加:

  1. //__get()方法用来获取私有属性

    Joker AIx
    Joker AIx

    一站式AI创意生产平台,覆盖图像、视频、音频、文案全品类创作

    下载
  2. private function __get($property_name)
  3. {

    立即学习PHP免费学习笔记(深入)”;

  4.   if(isset($this->$property_name))

  5. {
  6. return($this->$property_name);
  7. }else
  8. {
  9. return(NULL);
  10. }
  11. }
  12. //__set()方法用来设置私有属性
  13. private function __set($property_name, $value)
  14. {
  15. $this->$property_name = $value;
  16. }
复制代码

__get() 方法:这个方法用来获取私有成员属性值的,有一个参数, 参数传入你要获取的成员属性的名称,返回获取的属性值, 这个方法不用我们手工的去调用,因为我们也可以把这个方法做成私有的方法, 是在直接获取私有属性的时候对象自动调用的。因为私有属性已经被封装上了,是不能直接获取值的(比如:“echo $p1->name” 这样直接获取是错误的),但是如果你在类里面加上了这个方法,在使用“echo $p1->name” 这样的语句直接获取值的时候就会自动调用__get($property_name)方法,将属性name传给参数$property_name,通过这 个方法的内部执行,返回我们传入的私有属性的值。如果成员属性不封装成私有的,对象本身就不会去自动调用这个方法。 __set()方法:这 个方法用来为私有成员属性设置值的,有两个参数,第一个参数为你要为设置值的属性名,第二个参数是要给属性设置的值,没有返回值。这个方法同样不用我们手 工去调用,它也可以做成私有的,是在直接设置私有属性值的时候自动调用的,同样属性私有的已经被封装上了, 如果没有__set()这个方法,是不允许的, 比如:$this->name=‘zhangsan’, 这样会出错,但是如果你在类里面加上了__set($property_name, $value)这个方法,在直接给私有属性赋值的时候,就会自动调用它,把属性比如name传给$property_name, 把要赋的值“zhangsan”传给$value,通过这个方法的执行,达到赋值的目的。如果成员属性不封装成私有的,对象本身就不会去自动调用这个方 法。为了不传入非法的值, 还可以在这个方法给做一下判断。

  1. class Person
  2. {
  3. //下面是人的成员属性, 都是封装的私有成员
  4. private $name; //人的名子
  5. private $***; //人的性别
  6. private $age; //人的年龄
  7. //__get()方法用来获取私有属性
  8. private function __get($property_name)
  9. {
  10. echo "在直接获取私有属性值的时候,自动调用了这个__get()方法
  11. ";
  12. if(isset($this->$property_name))
  13. {
  14. return($this->$property_name);
  15. }
  16. else
  17. {
  18. return(NULL);
  19. }
  20. }
  21. //__set()方法用来设置私有属性
  22. private function __set($property_name, $value)
  23. {
  24. echo "在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值
  25. ";
  26.   $this->$property_name = $value;
  27. }
  28. }
  29. $p1=new Person();
  30. //直接为私有属性赋值的操作, 会自动调用__set()方法进行赋值
  31. $p1->name="张三";
  32. $p1->***="男";
  33. $p1->age=20;
  34. //直接获取私有属性的值, 会自动调用__get()方法,返回成员属性的值
  35. echo "姓名:".$p1->name."
  36. ";
  37. echo "性别:".$p1->***."
  38. ";
  39. echo "年龄:".$p1->age."
  40. ";
  41. ?>
复制代码


PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

38

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

83

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

97

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

223

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

458

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

169

2026.03.04

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

246

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

34

2026.03.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP面向对象基础课程(更新中)
PHP面向对象基础课程(更新中)

共12课时 | 0.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号