热门标签 | 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 并不容易。不适合小型规模的应用程序。


推荐阅读
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 火星商店问题:线段树分治与持久化Trie树的应用
    本题涉及编号为1至n的火星商店,每个商店有一个永久商品价值v。操作包括每天在指定商店增加一个新商品,以及查询某段时间内某些商店中所有商品(含永久商品)与给定密码值的最大异或结果。通过线段树分治和持久化Trie树来高效解决此问题。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ... [详细]
  • Codeforces Round #566 (Div. 2) A~F个人题解
    Dashboard-CodeforcesRound#566(Div.2)-CodeforcesA.FillingShapes题意:给你一个的表格,你 ... [详细]
  • 本文探讨了如何通过最小生成树(MST)来计算严格次小生成树。在处理过程中,需特别注意所有边权重相等的情况,以避免错误。我们首先构建最小生成树,然后枚举每条非树边,检查其是否能形成更优的次小生成树。 ... [详细]
  • 本文详细探讨了KMP算法中next数组的构建及其应用,重点分析了未改良和改良后的next数组在字符串匹配中的作用。通过具体实例和代码实现,帮助读者更好地理解KMP算法的核心原理。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 本实验主要探讨了二叉排序树(BST)的基本操作,包括创建、查找和删除节点。通过具体实例和代码实现,详细介绍了如何使用递归和非递归方法进行关键字查找,并展示了删除特定节点后的树结构变化。 ... [详细]
  • Linux设备驱动程序:异步时间操作与调度机制
    本文介绍了Linux内核中的几种异步延迟操作方法,包括内核定时器、tasklet机制和工作队列。这些机制允许在未来的某个时间点执行任务,而无需阻塞当前线程,从而提高系统的响应性和效率。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
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社区 版权所有