关于PHP接口的学习

 更新时间:2016年11月25日 16:10  点击:1686



  最近学习PHP5接口的过程中遇到了困难 ,书中说是实现多重继承的一种方式,但我依然不知道具体该如何实现。在网上查PHP接口的资料很少,就查了java的,其实基本上都差不多。看完包装机《澄清Java(接口与继承)》这篇文章才恍然大悟,原来包装机我一开始理解就有误,所谓的多重继承是指接口继承类,而不是类继承接口。
    文章中提到了OO的抽象,正如文章中的那句话——"抽象就是抽去像的部分",很形象,以前想到抽象总是认为很难理解,抽象嘛,哈哈,现在就很容易理解了,这也正是接口和抽象类所要做的事情。
    文章中还有很多观点也让我受益匪浅,罗列如下:
            OO的精髓,我以为,是对对象的抽象。
            接口的作用,一言以蔽之,就是标志类的类别(type of class)。把不同类型的类归于不同的接口,可以更好的管理他们。
            继承的意义也在于抽象,而不是代码重用。
     看完这篇文章,现在基本上理解接口、抽象类、继承该如何应用了。

原文如下:
澄清Java(接口与继承) 计算机学院研二的兄弟与我讨论Java,一见面,几个问题全是关于接口,接口有什么用?为什么要用接口?什么时候该使用接口?很庆幸他们不是问我 Java如何连接SQL Server,或者是如何开发J2EE应用,这类问题有杀伤力,避之则吉。今年计算机学院本科有个毕业设计课题是做J2ME,选这个题目的学生在5月末都还在苦着脸研究java.util.*这个包,这个这个……唉。

  大多数人认为,接口的意义在于顶替多重继承。众所周知Java没有c++那样多重继承的机制,但是却能够实作多个接口。其实这样做是很牵强的,接口和继承是完全不同的东西,接口没有能力代替多重继承,也没有这个义务。接口的作用,一言以蔽之,就是标志类的类别(type of class)。把不同类型的类归于不同的接口,可以更好的管理他们。OO的精髓,我以为,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言(比如c++、java、c#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象。(cowboy的名言是“抽象就是抽去像的部分”,看似调侃,实乃至理)。

  设计模式中最基础的是工厂模式(Factory),在我最近的一个很简单的应用中,我想尽量的让我的程序能够在多个数据库间移植,当然,这涉及很多问题,单是如何兼容不同DBMS的SQL就让人头痛。我们不妨先把问题简单化,只考虑如何连接不同的数据库。

  假设我有很多个类,分别是Mysql.java、SQLServer.java、Oracle.java、 DB2.java,他们分别连接不同的数据库,统一返回一个Connection对象,并且都有一个close方法,用于关闭连接。只需要针对你的 DBMS,选择不同的类,就可以用了,但是我的用户他会使用什么数据库?我不知道,我希望的是尽量少的修改代码,就能满足他的需要。我可以抽象如下接口:
package org.bromon.test;
public interface DB
{
  java.sql.Connection openDB(String url,String user,String password);
  void close();
}

  这个接口只定义两个方法,没有任何有实际意义的代码,具体的代码由实作这个接口的类来给出,比如Mysql.java:

Package org.bromon.test;
import java.sql.*;
public class Mysql implements DB
{
  private String url=”jdbc:mysql:localhost:3306/test”;
  private String user=”root”;
  private String password=””;
  private Connection conn;
  public Connection openDB(url,user,password)
  {
    //连接数据库的代码
  } <?php
// **************************************** //
// 功能:给图片添加文字
// 参数: $img 图片文件名
// $new_img 另存图片文件名,如果为空表示不另存图片
// $text 字符串内容
// text_size 字符串大小
// text_angle 字型串输出角度
// text_x 字符串输出 x 坐标
// text_y 字符串输出 y 坐标
// $text_font 字型文件名
// $r,$g,$b 字符串颜色RGB值
// **************************************** //
function img_text($img, $new_img, $text, $text_size, $text_angle, $text_x, $text_y, $text_font, $r, $g, $b){

$text=iconv("gb2312","UTF-8",$text);
Header("Content-type: image/gif");
$im = @imagecreatefromstring(file_get_contents($img)) or die ("打开图片失败!");
$color = ImageColorAllocate($im, $r,$g,$b);

//ImageTTFText(int im, int size, int angle, int x, int y, int col, string fontfile, string text):
//本函数将 TTF (TrueType Fonts) 字型文字写入图片。
//参数: size 为字形的尺寸;
// angle 为字型的角度,顺时针计算,0 度为水平(由左到右),90 度则为由下到上的文字;
// x,y 二参数为文字的坐标值 (原点为左上角);
// col 为字的颜色;
// fontfile 为字型文件名称;
// text 是字符串内容。
ImageTTFText($im, $text_size, $text_angle, $text_x, $text_y, $color, $text_font, $text);

if ($new_img==""):
ImageGif($im); // 不保存图片,只显示
else:
ImageGif($im,$new_img); // 保存图片,但不显示
endif;

ImageDestroy($im); //结束图形,释放内存空间


?>

勉勉强强,揣着这几天学到的心得,我又来鸡歪了

呵呵,为什么跟黑客帝国扯上关系呢,呵呵,这得从ASP.NET的封装讲起

在黑客帝国中所有的人他们全都自认为生活在一个有阳光,有绿色的世界中,实际上却是矩阵所构造的一种虚像与控制,他们不知道自已一直都在营养容器里面过着日子

就好像搞ASP.NET的人,他们跟泡在营养容器里的人一样,被MS构造出来的各种各样的类库包围着,他们从来不会想过这些类库是怎么来的(这些命名空间怎么来的),他们只关心怎么使用这些类库,这些命名空间,底层如何实现这些东西很少有人会去考虑。

他们实例化着MS提供的类库,调用着MS已经实现了的对像方法,但没有人见过这些类库的源码或是没有人知道这些类库及类库的方法是怎么实现的,就好像黑客帝国里面的人从来就没有试着睁开眼睛看到过外面的世界,他们只生活在被虚拟出来的环境中~

这两者何其相似

比如说调用AJAX,在asp.net中这现实AJAX何其简单,如果是之前没接触过别的WEB编程语言的直接来用ASP.net,他可能就不知道原来WEB要实现AJAX要通过JS,要通过XML,要通过xmlhttp,他只会觉得,WEB原本就是可以这样子的,他的思维给MS虚拟构造出来的假象给蒙蔽了。

就好像在黑客帝国里生活在矩阵电脑里的人都能一跳跳个十几米几十米的,他们可能会觉得很正常,但是现实中不是这样子的,现实中那不是正常的。

再举个例子,树状菜单,动态载入的

在PHP(应该说是常规中才对)中我们要实现树状菜单

假设在不知道有XLoadTree的情况下,我们可能要一砖一瓦的搞起,这样,我们了解非常深,知道每一次点击会触发什么事件,隐藏了什么,又显示了什么,又传输了什么,每个事件的触发都是我们自定义的

在后来知道了有XLoadTree类库的情况下,我们非常容易的就可以实现树状菜单,而且通过查看源码我们也可以很容易的了解到JS实现这些功能的过程和原理。

但是在asp.net中,实现这一切多么的简单,直接从控件栏里面拖TreeView过来就行了,你需要了解JS吗?不需要,尽管最终在浏览器端实现这一切的是用JS,但是,你不需要了解JS,你只需要知道treeview这个控件怎么用就行了,也就是说,你不会知道底层是怎么回事,最终的JS是怎么实现的。

夜深了,睡了,不说了~留待下回分解

————————————————————————

备注:我无意评比这两种语言谁优谁劣,那是傻人才干的事,我只是感到迷惑,我只是在把我在学asp.net过程中碰到的新事物与PHP进行比较,,用我被MS影响到的思维与常规的WEB思维进行对比。

“自慰”的说一句,我这算不算博取众长?

哈哈哈,开玩笑了,这句话只不过是逗大家一笑罢了

 本文作者:longlongago     博客地址:http://blog.111cn.net/longlongago2000

        寒假期间没事用asp做了一个写博的程序,后来想用php实现,于是就上网找到了php+mysql安装了,我找到的是安装自动配置的(phpStudyAdmin),很方便,安装好就可以用的,不用进行复杂的配置(听说配置很复杂,自己没试过)。

       开始学php,我知道要用实例来学php上手速度最快,想到我以前学asp是先做个简单的登录验证,做起来思想跟asp一样,都是表单的发送和接收,恰恰是这两个简单的动作在以后的编程中用得最多,可以说学会这两个动作你就开始入门了。我编写的代码如下:

登录:test1.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title><? echo "dskdfj|"."+++++++++++"; ?></title>
</head>

<body>

<form method="post" action="test2.php">
<table width="200" border="1">
  <tr>
    <td width="59">&nbsp;</td>
    <td width="115"><input type="text" name="text1" /></td>
    <td width="8">&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><input type="text" name="text2" /></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><label>
      <input type="submit" name="Submit" value="提交" />
    </label>
    <input type="reset"

突然接到Packt publishing的邮件,内容是关于”Object-Orientated Programming with PHP5“的书评。
以前从来没有做过书评,对于评论的样式内容结构的不合理,在此对读者表示歉意。

内容
简要概述,这本书的章节是:
面向对象(OOP)与程序设计(PS:应该是面向过程吧)(什么是OOP?,为什么要OOP?, 两者的区别等等)
开始 OOP (对象(封装),继承,多态等等)
高级OOP (使用 PHP 函数,异常,迭代等等)
设计模式Design Patterns (Strategy, Singleton, Adapter, Observer, Decorator etc)(这里就不译了)
反射和单元测试(phpUnit)
Standard PHP Library (著名的SPL)
OOP数据库 (MySQLi, PDO, 数据持久层Abstraction layers - PEAR::MDB2, ADODB and Active Record)
OOP和XML (SimpleXML, xpath, Dom)
MVC / Frameworks
针对初/中水平开发人员


支持
适当的介绍了 SPL (Standard PHP Library)
介绍了 PDO, PEAR::MDB2, AdoDB and MySQLi
介绍了主要的面向对象设计模式
介绍了MVC和frameworks(框架)

反对
只有250页
不够深入
很多语法错误,希望在出版的时候能够改正这些错误。
有很多拼写错误 (e.g. s/Mehod()/Method())
有些例子很差(请见下文)
十页的篇幅去讲PHPUnit API,在最后讲使用框架开发一个项目,我觉得应该利用一部分篇幅将一个主要的框架,例如zend或者codeignitor。话虽如此,我觉得这本书还是不错的,尤其是能学到别人怎么解决问题,这对于初中级开发人员会有很大的帮助。


代码实例
为了使这本书更有意思,第四章讲了很多主要的设计模式。其中一个decorator模式,部分代码如下:
 
$post = new Post();
$comment = new Comment();
$post->filter();
$comment->filter();
if($BBCodeEnabled==false && $EmoticonEnabled==false) {
    $PostContent = $post->getContent();
    $CommentContent = $comment->getContent();
}
elseif($BBCodeEnabled==true && $EmoticonEnabled==false) {
    $bb = new BBCodeParser($post);
    $PostContent = $bb->getContent();
    $bb = new BBCodeParser($comment);
    $CommentContent = $bb->getContent();
}
elseif($BBCodeEnabled==false && $EmoticonEnabled==true){
    $em = new EmoticonParser($post);
    // etc.
}

[!--infotagslink--]

相关文章

  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • c# 三种方法调用WebService接口

    这篇文章主要介绍了c# 三种方法调用WebService接口的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-07
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • PyTorch一小时掌握之迁移学习篇

    这篇文章主要介绍了PyTorch一小时掌握之迁移学习篇,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-08
  • vue接口请求加密实例

    这篇文章主要介绍了vue接口请求加密实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-12
  • PHP中func_get_args(),func_get_arg(),func_num_args()的区别

    复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04
  • PHP编程 SSO详细介绍及简单实例

    这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
  • PHP实现创建以太坊钱包转账等功能

    这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
  • C#简单了解接口(Interface)使用方法

    这篇文章主要介绍了C#简单了解接口(Interface)使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-12-08
  • SpringBoot接口接收json参数解析

    这篇文章主要介绍了SpringBoot接口接收json参数解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-10-19
  • C# Rx的主要接口深入理解

    这篇文章主要介绍了C# Rx的主要接口深入理解的相关资料,需要的朋友可以参考下...2020-06-25
  • php微信公众账号开发之五个坑(二)

    这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
  • Feign接口方法返回值设置方式

    这篇文章主要介绍了Feign接口方法返回值设置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-08
  • vue设置全局访问接口API地址操作

    这篇文章主要介绍了vue设置全局访问接口API地址操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-14
  • 如何设计一个安全的API接口详解

    在日常开发中,总会接触到各种接口,前后端数据传输接口,第三方业务平台接口,下面这篇文章主要给大家介绍了关于如何设计一个安全的API接口的相关资料,需要的朋友可以参考下...2021-08-12
  • ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单

    首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31
  • PHP如何通过date() 函数格式化显示时间

    这篇文章主要介绍了PHP如何通过date() 函数格式化显示时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-13
  • php怎么写api接口?php写api接口的实例代码

    php怎么写api接口?本文介绍了php写api接口的实例代码,有兴趣的同学可以参考一下。 http://localhost/openUser.php?act=get_user_list&type=json在这里openUser.php...2017-07-06
  • vue配置多代理服务接口地址操作

    这篇文章主要介绍了vue配置多代理服务接口地址操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-08