11、PHP面向对象1

news2024/11/20 18:36:34

1、PHP的面向对象与其他语言类似,但也有不同。

  • PHP访问成员变量时,需要用“->”,而不能用“.”,访问成员函数时,需要用“->”,而不能用“.”。操作符“::”可以在没有任何声明实例的情况下访问类中的静态成员,必须用static定义。
  • PHP用new实例化对象时,类名后面的括号可以省略。new className();new className都是可以的,当然构造函数是需要没有参数的。

2、在类中,用var定义成员变量,var定义的成员变量都是公开的。

3、创建子类时用extends继承父类。

一个类的例子如下:

<?php
class Site{
    //成员变量
    var $url;//用var定义成员变量,为公有变量
    var $title;

    //成员函数
    function setUrl($par){
        $this->url=$par;
    }
    function getUrl(){
        echo $this->url.PHP_EOL;
    }
    function setTitle($par){
        $this->title=$par;
    }
    function getTitle(){
        echo $this->title.PHP_EOL;
    }
}

class subSite extends Site{
    var $category;
    function setCat($par){
        $this->category=$par;
    }
    function getCat(){
        echo $this->category.PHP_EOL;
    }
    function getUrl(){//方法重载
        echo $this->url.PHP_EOL;
        return $this->url;
    }
    function getTitle(){
        echo $this->title.PHP_EOL;
        return $this->title;
    }
}

$taobao=new Site;//用默认的构造函数,可以不加括号
$google=new Site();

$taobao->setTitle("淘宝");//只能用箭头访问成员函数
$google->setTitle("谷歌搜索");

$taobao->setUrl("taobao.com");
$google->setUrl("google.com");

$taobao->getTitle();
$google->getTitle();

$taobao->getUrl();
$google->getUrl();
?>

输出如下:

4、 PHP自己实现构造函数时,用__construct。注意:前缀时两根下划线。

<?php
class myClass{
    function __construct(){//两根下划线
        print "构造函数\n";
        $this->name="myClass";
    }
    function __destruct(){
        print "销毁".$this->name."\n";
    }
}
echo "start".PHP_EOL;
$obj=new myClass();
echo "end".PHP_EOL;
?>

输出结果:构造函数在实例化对象时调用,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。

5、类中的方法可以被定义为公有,私有或受保护。如果没有设置这些关键字,则该方法默认为公有。 

6、使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。

接口中定义的所有方法都必须是公有,这是接口的特性。

类中必须实现接口中定义的所有方法。

类可以实现多个接口,用逗号来分隔多个接口的名称。

<?php
interface iTemplate{
    public function setVariable($name,$var);
    public function getHtml($template);
}
class Template implements iTemplate{
    public  static $var1=1;//静态属性
    public   $var2=3;
    public $vars=array();
    public function setVariable($name,$var){
        $this->vars[$name]=$var;
    }
    public function getHtml($template){
        foreach ($this-vars as $name => $value) {
            $template=str_replace("{'.$name.'}",$value,$template);
        }
        return $template;
    }
}
$iT=new Template;
$iT->setVariable("golden states","curry");


echo $iT::$var1.PHP_EOL;//静态属性用实例访问,有$符号
echo Template::$var1.PHP_EOL;//静态属性用类名访问$符号
echo $iT->var2;//箭头后面没$。
print_r($iT->vars);//访问数组
var_dump($iT->vars);
?>

7、PHP 对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。

  • public(公有):公有的类成员可以在任何地方被访问。
  • protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。
  • private(私有):私有的类成员则只能被其定义所在的类访问。
<?php
class myClass{
    public $public ='public';
    protected $protected='protected';
    private $private='private';
    function printHello(){
        echo $this->public.PHP_EOL;
        echo $this->protected.PHP_EOL;
        echo $this->private.PHP_EOL;
    }
}
$o=new myClass;
echo $o->public;
//echo $o->protected;
//echo $o->private;
$o->printHello();

class subClass extends myClass{
    protected $protected="sub protected";
    function printHello(){
        echo $this->public.PHP_EOL;
        echo $this->protected.PHP_EOL;//输出子类的protected
        echo $this->private.PHP_EOL;
    }
}
$o2=new subClass();
echo $o2->public;
//echo $o2->private;
//echo $o2->protected;
$o2->printHello();
?>

 

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

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

相关文章

我身边IT业40岁的老家伙们都去哪儿了?

在IT行业&#xff0c;5年&#xff0c;足够一个程序员成为大牛、或者被淘汰了。 今年34岁&#xff0c;马上就到了那个敏感的“35岁”节点&#xff0c;当程序员的第10年&#xff0c;算是比较老的程序员了。 借身边一些朋友的真实经历来说说这些40岁的老家伙们最后都去哪儿了。 …

ansible自动化运维(一)

&#x1f618;作者简介&#xff1a;正在努力的99年公司职员。 &#x1f44a;宣言&#xff1a;人生就是B&#xff08;birth&#xff09;和D&#xff08;death&#xff09;之间的C&#xff08;choise&#xff09;&#xff0c;做好每一个选择。 &#x1f64f;创作不易&#xff0c;…

Spring 6 容器 IOC 万字详解

IoC 是 Inversion of Control 的简写&#xff0c;译为“控制反转”&#xff0c;它不是一门技术&#xff0c;而是一种设计思想&#xff0c;是一个重要的面向对象编程法则&#xff0c;能够指导我们如何设计出松耦合、更优良的程序。 Spring 通过 IoC 容器来管理所有 Java 对象的…

Python怎么实现模式匹配

什么是模式匹配 模式匹配是一种用于在数据中寻找特定模式或结构的技术。它可以用于识别、查找和提取符合特定模式要求的数据。 在计算机科学中&#xff0c;模式匹配通常用于字符串处理和数据分析领域。一些常见的模式匹配模式包括&#xff1a; 1. 字符串匹配&#xff1a;在一…

Python输出所有的Unicode字符!

代码一点点&#xff0c;主要就是用了chr函数&#xff1a; fopen("Unicode_Entire.txt","w",encoding"utf-8") i0 while i < 205745:f.write(chr(i))i1if i 0xD800:i 0xE000 f.close()1.因为直接输出太慢&#xff0c;改为文件输出 2.D800~D…

数据可视化(1)

使用python带的matplotlib库进行简单的绘图。使用之前先进行安装&#xff0c;pip install matplotlib。如果安装了Anaconda,则无需安装matplotlib。 1.简单折线图 #绘制简单图表 import matplotlib.pyplot as plt plt.plot([1,2,3,4,5]) plt.show() import matplotlib.pyp…

使用vscode+platformio搭建arduino开发环境

存在的问题&#xff1a; Arduino编译时会将所有的C文件都编译一遍造成编译很慢&#xff0c;一个简单的工程稍加修改有可能都需要三四分钟才能编译完成&#xff0c;同时arduino也不支持代码跳转查看功能&#xff0c;不方便代码查看。 解决方法&#xff1a; 使用vscodeplatfor…

Scala动态创建对象,scala反射

一、动态对象创建方法 方法1–java的迁移 //可带参数 val clsFullName"你要的类名路径"//例如&#xff1a;com.xlt.test.Fruitsval taskClass if (customizedClassLoader ! null) customizedClassLoader.loadClass(clsFullName)else this.getClass.getClassLoader…

在Clion中开发rt-thread

一、在github或者gitee中下载源代码&#xff08;不要下载master最新分支的&#xff0c;下载稳定的版本分支 v5.0&#xff09; https://gitee.com/rtthread 二、在rt-thread官网上下载env工具、并安装mingw、cmake环境 https://www.rt-thread.org/document/site/#/developmen…

Django快速上手

Django简介 Django 框架最初的诞生&#xff0c;主要是用来开发和管理 Lawrence Publishing Group&#xff08;劳伦斯出版集团&#xff09;旗下新闻网站的一款软件&#xff0c;是一款属于 CMS&#xff08;Content Management System&#xff0c;内容管理系统&#xff09;类的软…

FANUC机器人SRVO-217故障报警原因分析及参考解决办法

FANUC机器人SRVO-217故障报警原因分析及参考解决办法 如下图所示,示教器提示:SRVO-217紧急停止电路板未找到, 查阅手册可以看到以下的报警说明: 故障原因: 通电时未能识别紧急停止电路板或者增设的安全I/O装置。连接有多个安全I/O装置的系统中,在报警信息的最后,会显示发…

SkyWalking链路追踪-搭建-spring-boot-cloud-单机环境 之《10 分钟快速搭建 SkyWalking 服务》

首先了解一下单机环境 第一步&#xff0c;搭建一个 Elasticsearch 服务。第二步&#xff0c;下载 SkyWalking 软件包。第三步&#xff0c;搭建一个 SkyWalking OAP 服务。第四步&#xff0c;启动一个 Spring Boot 应用&#xff0c;并配置 SkyWalking Agent。第五步&#xff0c;…

测试开源C#人脸识别模块ViewFaceCore(2:人脸关键点定位器和活体检测)

ViewFaceCore模块中的FaceLandmarker类支持识别人脸关键点&#xff0c;也即人脸上的关键位置的坐标&#xff0c;其中主要调用Mark函数返回图片中指定人脸的关键点位置集合&#xff0c;该类需配合FaceDetector类共同使用。   FaceLandmarker类支持识别3种类型的人脸关键点&…

KingFunsion工程开发规范——JS规范

哈喽&#xff0c;大家好&#xff0c;我是雷工。 今天学习KingFunsion工程开发规范之JS规范。 第一章 统一规范 1.1. 一行代码只做一件事&#xff1b; 1.2. 长行拆分&#xff1b; 1.3. 代码块外使用try catch包裹&#xff1b; 1.4. 全局变量在数据词典中定义&#xff1b;…

分析业务团队如何进行技术建设

背景 大部分中大型的互联网公司&#xff0c;会按照一个技术团队 多个业务团队的组织形式。技术团队负责技术基础建设&#xff0c;而业务部门更多的聚焦在业务迭代上。 这种组织形式有其优越性&#xff1a; 可以避免大量重复技术建设 减少上下文&#xff0c;降低沟通成本 …

网络安全 Day20-计算机网络基础知识05(网络原理)

计算机网络基础知识05&#xff08;网络原理&#xff09; 1. OSI 模型2. VMware虚拟机NAT模式下上网原理3. 不能上网故障排查 1. OSI 模型 OSI 7层网络通信原理模型 OSI 国际网互联 OSI 数据包封装解封装过程 北京局域网主机A到深圳局域网主机B数据工作流程 2. VMware虚拟机N…

Qt+GDAL开发笔记(一):在windows系统mingw32编译GDAL库、搭建开发环境和基础Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/131931309 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

腾讯云 Cloud Studio 实战训练营——快速构建React完成点餐H5页面

目录 ​编辑 一、前言 1、什么是腾讯云 Cloud Studio 2、本文实验介绍 二、前期准备工作 1、注册 Cloud Studio 2、初始化工作空间 三、开发一个简版的点餐系统页面 1、安装依赖 1.1、安装 antd-mobile 1.2、安装 less 和 less-loader 1.3、暴露 webpack 配置文件 …

Linux JDK 安装详解

安装JDK 1.1 下载jdk压缩包 下载地址&#xff1a; Java Downloads | Oracle Java Downloads | Oracle 下载完成之后上传到服务器 # 1.将JDK解压缩到指定目录 tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/ 注意:-C参数是将JDK解压之后文件放入usr目录中 # 2.进入jdk解压缩目录…

前端Vue仿支付宝自定义可滑动轮播分页宫格菜单组件,可支持九宫格 十二宫格 十五宫格

背景介绍 随着技术的不断发展&#xff0c;传统的开发方式使得系统的复杂度越来越高。在传统开发过程中&#xff0c;一个小小的改动或者一个小功能的增加可能会导致整体逻辑的修改&#xff0c;造成牵一发而动全身的情况。为了解决这个问题&#xff0c;我们采用了组件化的开发模…