热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP简明教程面向对象基础1

PHP简明教程面向对象基础1类中魔术方法类中魔术方法不能被手动调用,几乎每个魔术方法都有触发时机和参数,PHP不能调用类中没有实现的魔术方法方法名触发时机参数1参数2备注__get
PHP简明教程

面向对象基础 1

类中魔术方法

类中魔术方法不能被手动调用,几乎每个魔术方法都有触发时机和参数,PHP不能调用类中没有实现的魔术方法

方法名触发时机参数1参数2备注
__get()对象访问类中private和protected属性时私有或被保护的成员变量的名字
__set()对象设置类中private和protected属性时私有或被保护的成员变量的名字设置的值
__construct()当一个对象被创建时继承时不会自动调用父类的该方法
__destruct()当一个对象被销毁时
__unset()当销毁私有成员变量时私有或被保护的成员变量的名字
__isset()当检测私有成员变量是否存在时私有或被保护的成员变量的名字
__call当调用类中没有的成员方法时调用的方法名传递的参数

继承

PHP在语法上只支持单继承,可以用接口来实现多继承

  • 基本语法

子类继承父类,就拥有了父类的成员变量和成员方法

访问权限
修饰符能否类外访问能否被继承
public可以可以
private不可以不可以
protected不可以可以
  • 重写
意义:当子类继承父类的方法后,重新在子类中实现这个方法
重写的种类
  1. 完全重写
    子类调用该方法后调用的是子类重写后的方法,父类调用该方法是父类自身的方法
  2. 扩展
    通过parent关键字先执行父类的方法,然后再增加自己的功能
  • parent关键字

class Father
{
public $name;
public $age;
public $height; function __construct($name, $age, $height)
{
$this->name = $name;
$this->age = $age;
$this->height = $height;
} function work()
{
echo '我每天辛辛苦苦的工作15个小时
';
}
}
class Son extends Father
{
public $weight;
public $girl;
public $money; function __construct($name, $age, $height, $weight, $girl, $money)
{
/*
$this->name = $name;
$this->age = $age;
$this->height = $height; */
//通过调用父类的__construct方法实现以上代码
parent::__construct($name, $age, $height);
$this->weight = $weight;
$this->girl = $girl;
$this->mOney= $money;
}
function work()
{
//echo '我每天喝着咖啡看着报纸清闲8个小时
';
//先执行父类的方法
parent::work();
//再写自己的代码
echo '我不仅工作的好,我还谈了一个对象,而且是厂花
';
}
}
$ming = new Son();
$ming->work();
//$lOng= new Father();
//$long->work();

  • final关键字

final修饰的class不能被继承

//A类不能被继承
final class A{}

final 修饰的成员方法不能被重写

class A{
final function func(){

}
}
class B extends A{
//不能对A类中func方法重写,因为func方法是final的
}

重写中的方法权限修改

private
越往后权限越高 重写的时候权限只能放大相等不能缩小

  • 类常量

定义方式:

使用define定义类外常量
使用const定义类内常量 定义常量的时候不能加权限修饰符

调用方法:

类外
类名::常量名 ($obj::常量名)
类内
self::常量名 ($this::常量名)

$this 对象
self 类
parent 父类

静态属性和静态方法

如果在成员属性或者成员方法前面加了static进行修饰,那么这个成员属性或者成员方法就不在属于某一个对象,而是属于整个类的

如果该成员属性发生了改变这个类的所有实例化对象的该属性都会发生改变

如果一个方法与他所在类型的实例无关,那么它就应该是静态的。所以所有的实例方法都应与实例有关

静态属性调用方法:

类外
类名::静态属性名 ($obj::静态属性名)
类内
self::静态属性名 ($this::静态属性名)

静态方法调用方法

类外
类名::静态方法名 ($obj::静态方法名,$obj->静态方法名)
类内
self::静态方法名 ($this::静态方法名,$this->静态方法名)

自动加载

命名规则:一个类是一个文件;类名与文件名相同;命名空间名和文件夹名相同

__autoload()

唯一写在类外的魔术方法

触发时机:当文件加载一个类的时候,并没有找到这个类,那么就会自动触发这个方法
参数:类名

简单实现

__autoload($className){
$file = ucfirst($className) . '.php';
include $file;
}

MVC

MVC设计方法

目录结构:

graph TB
MVC-->model模型
MVC-->view视图
MVC-->controller控制
MVC-->vendor第三方库

MVC详解:
由模型(model),视图(view),控制器(controller)完成的应用程序由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图;
MVC 是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用 MVC 应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。视图是用户看到并与之交互的界面。模型表示企业数据和业务规则。控制器接受用户的输入并调用模型和视图去完成用户的需求。
MVC 的优点:低耦合性、高重用性和可适用性、较低的生命周期成本、快速的部署、可维护性、可扩展性,有利于软件工程化管理
MVC 的缺点:没有明确的定义,完全理解 MVC 并不容易。不适合小型规模的应用程序。


推荐阅读
  • 历经三十年的开发,Mathematica 已成为技术计算领域的标杆,为全球的技术创新者、教育工作者、学生及其他用户提供了一个领先的计算平台。最新版本 Mathematica 12.3.1 增加了多项核心语言、数学计算、可视化和图形处理的新功能。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • PHP 实现多级树形结构:构建无限层级分类系统
    在众多管理系统中,如菜单、分类和部门等模块,通常需要处理层级结构。为了高效管理和展示这些层级数据,本文将介绍如何使用 PHP 实现多级树形结构,并提供代码示例以帮助开发者轻松实现无限分级。 ... [详细]
  • 本文详细介绍了如何在PHP中进行数组删除、清空等操作,并提供了在Visual Studio Code中创建PHP文件的步骤。 ... [详细]
  • Redux入门指南
    本文介绍Redux的基本概念和工作原理,帮助初学者理解如何使用Redux管理应用程序的状态。Redux是一个用于JavaScript应用的状态管理库,特别适用于React项目。 ... [详细]
  • 深入解析Serverless架构模式
    本文将详细介绍Serverless架构模式的核心概念、工作原理及其优势。通过对比传统架构,探讨Serverless如何简化应用开发与运维流程,并介绍当前主流的Serverless平台。 ... [详细]
  • 探讨如何修复Visual Studio Code中JavaScript的智能感知和自动完成功能在特定场景下无法正常工作的问题,包括配置检查、语言模式选择以及类型注释的使用。 ... [详细]
  • 本文将详细介绍多个流行的 Android 视频处理开源框架,包括 ijkplayer、FFmpeg、Vitamio、ExoPlayer 等。每个框架都有其独特的优势和应用场景,帮助开发者更高效地进行视频处理和播放。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • 本文介绍了如何在 C# 和 XNA 框架中实现一个自定义的 3x3 矩阵类(MMatrix33),旨在深入理解矩阵运算及其应用场景。该类参考了 AS3 Starling 和其他相关资源,以确保算法的准确性和高效性。 ... [详细]
  • 深入解析动态代理模式:23种设计模式之三
    在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ... [详细]
  • 本文介绍了如何在React和React Native项目中使用JavaScript进行日期格式化,提供了获取近7天、近半年及近一年日期的具体实现方法。 ... [详细]
  • 本文将继续探讨前端开发中常见的算法问题,重点介绍如何将多维数组转换为一维数组以及验证字符串中的括号是否成对出现。通过多种实现方法的解析,帮助开发者更好地理解和掌握这些技巧。 ... [详细]
  • 使用JS、HTML5和C3创建自定义弹出窗口
    本文介绍如何结合JavaScript、HTML5和C3.js来实现一个功能丰富的自定义弹出窗口。通过具体的代码示例,详细讲解了实现过程中的关键步骤和技术要点。 ... [详细]
  • 本文介绍了如何在PHP Magento模型中自定义主键,避免使用默认的自动递增主键,并提供了解决方案和代码示例。 ... [详细]
author-avatar
手机用户2702937647
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有