php 高级特性,PHP对象、模式与实践之高级特性分析

本文实例讲述了PHP面向对象程序设计高级特性。分享给大家供大家参考,具体如下:

高级特性

包括:

1.静态方法和属性(通过类而不是对象来访问数据和功能)

2.抽象类和接口(设计,实现分离)

3.错误处理(异常)

4.Final类和方法(限制继承)

5.拦截器(自动委托)

6.析构方法(对象销毁前的清理工作)

7.克隆对象(创建对象的副本)

8.把对象解析成字符串

PS,学会从内存的角度看代码。想象计算机的微观世界。

静态方法的小例子

class StaticExample{

static public $aNum = 10;

static public function sayHello(){

print "hello";

}

}

print StaticExample::$aNum."
";

StaticExample::sayHello();

tips:

1.静态方法不能访问类中的普通属性,因为那些属性属于一个对象,但可以访问静态属性。

2.我们不能再对象中调用静态方法,因此不能再静态方法中使用伪变量$this。

静态方法的大例子

class ShopProduct{

private $title;

private $producerMainName;

private $producerFirstName;

protected $price;

private $discount = 0;

private $id = 0;

function __construct($title,$firstName,$mainName,$price){

$this->title = $title;

$this->producerFirstName = $firstName;

$this->producerMainName = $mainName;

$this->price = $price;

}

public function setID($id){

$this->id = $id;

}

public static function getInstance($id,PDO $pdo){

$query = "select * from products where id= '$id'";

$stmt = $pdo->query($query);

$row = $stmt->fetch();

if(empty($row)){

return null;

}

if($row['type'] == "book"){

$product = new BookProduct($row['title'],

$row['firstname'],

$row['mainname'],

$row['price'],

$row['numpages']

);

}else if($row['type'] == "cd"){

$product = new CdProduct($row['title'],

$row['firstname'],

$row['mainname'],

$row['price'],

$row['playLength']

);

}else{

$product = new ShopProduct($row['title'],

$row['firstname'],

$row['mainname'],

$row['price']

);

}

$product->setId($row['id']);

$product->setDiscount($row['discount']);

return $product;

}

public function getProducerFirstName(){

return $this->producerFirstName;

}

public function getProducerMainName(){

return $this->producerMainName;

}

public function setDiscount($num){

$this->discount = $num;

}

public function getDiscount(){

return $this->discount;

}

public function getTitle(){

return $this->title;

}

public function getPrice(){

return ($this->price - $this->discount);

}

function getProducer(){

return $this->producerFirstName." ".$this->producerMainName;

}

function getSummaryLine(){

$base = "$this->title({$this->producerMainName},";

$base .= "{$this->producerFirstName})";

return $base;

}

}

class CdProduct extends ShopProduct{

private $playLength;

function __construct($title,$firstName,$mainName,$price,$playLength){

parent::__construct($title,$firstName,$mainName,$price);//继承父类的构造函数

$this->playLength = $playLength;

}

function getPlayLength(){

return $this->playLength;

}

function getSummaryLine(){

$base = parent::getSummaryLine();

$base .= ":playing time {$this->playLength}";

return $base;

}

}

class BookProduct extends ShopProduct{

private $numPages = 0;

function __construct($title,$firstName,$mainName,$price,$numPages){

parent::__construct($title,$firstName,$mainName,$price);

$this->numPages = $numPages;

}

function getnumPages(){

return $this->numPages;

}

function getSummaryLine(){

$base = parent::getSummaryLine();

$base .= ":page count {$this->numPages}";

return $base;

}

}

$dsn = "sqlite:C:/Users/Administrator/Desktop/shop.db";

$pdo = new PDO($dsn,null,null);

$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

$obj = ShopProduct::getInstance(1,$pdo);

echo $obj->getSummaryLine();

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

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

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

相关文章

[html] DOM和BOM有什么区别?

[html] DOM和BOM有什么区别? BOM指 浏览器对象模型提供了独立于内容而与浏览器窗口进行交互的对象。描述了与浏览器进行交互的方法和接口,可以对浏览器窗口进行访问和操作,譬如可以弹出新的窗口,改变状态栏中的文本。 DOM指 文档…

Moblin在MID软件系统中扮演三个关键角色........

Moblin在MID软件系统中扮演三个关键角色: 1) 创建一个开发人员社区,关注创建和增强基于Linux的MID和其他设备所需的核心技术。最先创建Moblin时,这是该项目的首要目标。创建MID为目标的Linux操作系统版本的供应商将使用此核心技术…

docker学习二

一 部署Mysql 搜索镜像 docker search mysql拉取镜像 docker pull centos/mysql-57-centos7 创建Mysql 容器 docker run -di --namedocker_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORDroot centos/mysql-57-centos733306是宿主机的端口,3306是docker的端口&#xf…

php 数组的定义方法,PHP中数组定义的几种方法

Array 数组PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈&…

[html] html和html5有什么区别呢?

[html] html和html5有什么区别呢&#xff1f; 1.HTML5简化了很多细微的语法&#xff0c;例如doctype的声明&#xff0c;只需要写<!doctype html>就行了。HTML5与HTML5&#xff0c;XHTML1兼容&#xff0c;但是与SGML不兼容。 2.新增与语义化标签【header、footer、sectio…

new关键字对类成员的阻断

昨天终于对new关键字对类成员的阻断作用有了比较清晰的认识&#xff0c;“对类成员的阻断”是王涛大哥在其作品《你必须知道的.NET》的说法&#xff0c;昨天在园里看到一位前辈戏称之为“封印咒术”&#xff0c;我感觉这个说法很贴切。比如Sons类继承自Fathers类&#xff0c;在…

[html] 用一个div模拟textarea的实现

[html] 用一个div模拟textarea的实现 上面的代码实现了div变为可编辑状态,但是textarea标签可以在右下角自由拉伸<div class"edit" contenteditable"true" style"resize: both"></div>这样就可以啦个人简介 我是歌谣&#xff0c;欢…

LOJ 2979 「THUSCH 2017」换桌——多路增广费用流

题目&#xff1a;https://loj.ac/problem/2979 原来的思路&#xff1a; 优化连边。一看就是同一个桌子相邻座位之间连边、相邻桌子对应座位之间连边。 每个座位向它所属的桌子连边。然后每个人建一个点&#xff0c;向若干桌子连边。 因为连边的桌子是区间&#xff0c;所以线段树…

java如何实现红包雨,一个简单的红包雨实现

效果图如下&#xff1a;我的视频 1_20170207191503.gif这个简单动画的主要思路&#xff1a; 将多个 红包View 通过 属性动画 从屏幕顶端 飘落到 屏幕底部。只不过在飘落的动画过程中&#xff0c;加入了一些随机路线 Path。主要涉及到的知识点&#xff1a;1.Path 和 PathMeasure…

【原】基于Windows Media Player, 写自己的播放器【有源码,可下载整个工程】

最近有客户问我&#xff0c;怎么把Windows Media Player 嵌套在自己的项目中。 以前我在Delphi下玩过Windows Media Player&#xff0c;可是在Microsoft Visual Studio 2008 没有测试过。 到网上搜索了一把&#xff0c;果然得到很多例子。 其中CSDN上有个例子写的不错&#xff…

[html] 说说你对cookie和session的理解

[html] 说说你对cookie和session的理解 cookie: 可以通过客户端, 服务端设置, 容量小, 可以通过设置domain来实现同步登录, 除了name, value, 它还有多个选项, domain, path, secure, expires, 客户端和服务端可以通过cookie来通讯, 传递信息session: 由服务端设置并发起, 是服…

Oracle数据库php短连接,PHP 连接 Oracle

起因由于项目的数据库需要用客户购买的Oracle数据库&#xff0c;所以需要php安装oci扩展。运行环境php : 7.2系统: windows10oracle: 11gR2安装相关环境由于php的oci8扩展还是需要使用到oracle的一些包&#xff0c;所以先下载这一些。下载完成后解压缩这个压缩包&#xff0c;并…

java的内存模型--jmm

java虚拟机运行时的数据区 1.线程共享区&#xff08;方法区&#xff0c;Java堆&#xff09; 2.线程独占区&#xff08;虚拟机栈&#xff0c;本地方法栈&#xff0c;程序计数器&#xff09; 程序计数器&#xff1a;记录当前线程所执行到的字节码的行号转载于:https://www.cnblog…

计算机考研文章精选[转载]

今天在网上看到了一篇超全的计算机考研文章集合&#xff0c;里面有很多曾经看过&#xff0c;挺经典的&#xff0c;于是忍不住收藏下来&#xff0c;希望对那些即将报考计算机研究生和工作了仍不放弃考研的朋友有所帮助 计算机考研常见问题解答 地址&#xff1a;http://ww…

PHP鼠标滑过变色命令,WordPress鼠标悬停变色的修改方法

原创内容&#xff0c;转载请注明出处&#xff1a;https://www.myzhenai.com.cn/post/3253.html关键词&#xff1a;wordpress 鼠标 悬停 变色我总是觉得我两个WordPress博客的主题里使用的鼠标悬停变色的颜色不太喜欢&#xff0c;就是当鼠标划过或停留在某一个链接上的时候&…

圆面积异常

package zengliang;import java.util.*;public class Suv {public static void main(String[] args) {// TODO 自动生成的方法存根try{double r,s;final double PI 3.14;Scanner scnew Scanner(System.in);System.out.println("输入圆的半径&#xff1a;");r sc.ne…

[html] html5哪些标签可以优化SEO?

[html] html5哪些标签可以优化SEO? 跟标签语义化有关&#xff0c;从上往下&#xff1a;meta titlenav header main article section aside footerfigure picture time video audio个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持…

sql语句的效率

1、尽量避免反复访问同一张或几张表&#xff0c;尤其是数据量较大的表&#xff0c;可以考虑先根据条件提取数据到临时表中&#xff0c;然后再做连接。 2、尽量避免使用游标&#xff0c;因为游标的效率较差&#xff0c;如果游标操作的数据超过1万行&#xff0c;那么就应该改写&a…

php跳转分站,PHP判断IP并转跳到相应城市分站的方法

本文实例讲述了PHP判断IP并转跳到相应城市分站的方法。分享给大家供大家参考。具体实现方法如下&#xff1a;class QQWry{var $StartIP0;var $EndIP0;var $Country;var $Local;var $CountryFlag0;// 标识 Country位置// 0x01,随后3字节为Country偏移,没有Local// 0x02,随后3字节…

SpringBoot学习笔记(9)----SpringBoot中使用关系型数据库以及事务处理

在实际的运用开发中&#xff0c;跟数据库之间的交互是必不可少的&#xff0c;SpringBoot也提供了两种跟数据库交互的方式。 1. 使用JdbcTemplate 在SpringBoot中提供了JdbcTemplate模板类&#xff0c;JdbcTemplate提供的方法进行增删改查的操作。 首先需要在pom文件中添加依赖:…