PHP 面向对象技术

 更新时间:2016年11月25日 16:09  点击:1290

1.面向对象的概念
2.什么是类,什么是对象,类和对象之间的关系
3.什么是面向对象编程呢?
4.如何抽象出一个类?
5.如何实例化对象?
6.如何去使用对象中的成员?
7.特殊的引用“$this”的使用
8.构造方法与析构方法
9.封装性
10.__set()、__get()、__isset()、__unset()四个方法的应用
11.类的继承
12.多态的应用
13.重载新的方法
14.访问类型
15.静态成员的使用
16.final 关键字的应用
17.__toString()方法
18.克隆对象
19.__call 处理调用错误
20.自动加载类
21.把对象串行化
22.抽象方法和抽象类
23.php5 接口技术

 

1.面向对象的概念
面向对象编程(Object Oriented Programming, OOP, 面向对象程序设计)是一种计算机编程
架构,OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成,OOP
达到了软件工程的三个目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收
信息、处理数据和向其它对象发送信息。面向对象一直是软件开发领域内比较热门的话题,首先,
面向对象符合人类看待事物的一般规律。其次,采用面向对象方法可以使系统各部分各司其职、各
尽所能。为编程人员敞开了一扇大门,使其编程的代码更简洁、更易于维护,并且具有更强的可重
用性。有人说PHP 不是一个真正的面向对象的语言,这是事实。PHP 是一个混合型语言,你可以使
用OOP,也可以使用传统的过程化编程。然而,对于大型项目,你可能需要在PHP 中使用纯的OOP
去声明类,而且在你的项目里只用对象和类。这个概念我先不多说了,因为有很多朋友远离面向对
象编程的主要原因就是一接触面向对象概念的时候就理解不上去, 所以就不想去学下去了。等读
者看完整篇内容后再去把概念搞明白吧。
2.什么是类,什么是对象,类和对象之间的关系
类的概念:类是具有相同属性和服务的一组对象的集合。它为属于该类的所有对象提供了统一
的抽象描述,其内部包括属性和服务两个主要部分。在面向对象的编程语言中,类是一个独立的程
序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。

对象的概念:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一
个对象由一组属性和对这组属性进行操作的一组服务组成。从更抽象的角度来说,对象是问题域或
实现域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用;它是一组属
性和有权对这些属性进行操作的一组服务的封装体。客观世界是由对象和对象之间的联系组成的。
类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对一类对象的抽象就是
类。类描述了一组有相同特性(属性)和相同行为(方法)的对象。
上面大概就是它们的定义吧,也许你是刚接触面向对象的朋友, 不要被概念的东西搞晕了,给
你举个例子吧,如果你去中关村想买几台组装的PC 机,到了那里你第一步要干什么,是不是装机
的工程师和你坐在一起,按你提供的信息和你一起完成一个装机的配置单呀,这个配置单就可以想
象成是类,它就是一张纸,但是它上面记录了你要买的PC 机的信息,如果用这个配置单买10 台机
器,那么这10 台机子,都是按这个配置单组成的,所以说这10 台机子是一个类型的,也可以说是
一类的。那么什么是对象呢,类的实例化结果就是对象,用这个配置单配置出来(实例化出来)的
机子就是对象,是我们可以操作的实体,10 台机子,10 个对象。每台机子都是独立的,只能说明
他们是同一类的,对其中一个机做任何动作都不会影响其它9 台机器,但是我对类修改,也就是在
这个配置单上加一个或少一个配件,那么装出来的9 个机子都改变了,这是类和对象的关系(类的
实例化结果就是对象)。

3.什么是面向对象编程呢?
就不说他的概念,如果你想建立一个电脑教室,首先要有一个房间, 房间里面要有N 台电脑,
有N 张桌子, N 把椅子, 白板, 投影机等等,这些是什么,刚才咱们说了,这就是对象,能看
到的一个个的实体,可以说这个电脑教室的单位就是这一个个的实体对象, 它们共同组成了这个
电脑教室,那么我们是做程序,这和面向对象有什么关系呢?

1、使用php写一段简单查询,查出所有姓名为“张三”的内容并打印出来
表名User
Name          Tel              Content         Date
张三        13333663366        大专毕业       2006-10-11
张三        13612312331        本科毕业       2006-10-15
张四        021-55665566       中专毕业       2006-10-15
2、请根据上面的题目完成代码: 
$mysql_db=mysql_connect("local","root","pass");
@mysql_select_db("DB",$mysql_db);
3、如何使用下面的类,并解释下面什么意思?
class test
{
Get_test($num)
{
$num=md5(md5($num)."En");
return $num;
}
}
4、用javascipt打印 “上海爱吉”
5、写出 SQL语句的格式 : 插入 ,更新 ,删除
6、谈谈对你PHP认识或你擅长的技术?
答案:
1.SELECT Name,Tel,Content,Date FROM User WHERE Name=''张三''
2. $mysql_db = mysql_connect("local","root","pass");
@mysql_select_db("DB",$mysql_db);
$sql = "SELECT Name,Tel,Content,Date FROM User WHERE Name=''张三''";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result))
{
echo $row[''Name'']  . ''  '' . $row[''Tel''] . ''  '' . $row[''Content''] . '' 
'' . $row[''Date''] . "<br>rn";
}
3.
用法:
$get_test = new test();
$result = $get_test->Get_test(2);
将$num变量进行两次md5后返回,第2次的md5中的参数,在第一次md5($num)后多加了En
4.
<>
write(''上海爱吉'');
</>
5.
插入
INSERT INTO table (a1,a2,a3) S ($val1, ''$val2'', $val3);
修改
UPDATE table SET a1=$a1, a2=''$a2'' WHERE id=3;
删除
DELETE FROM table WHERE id=3;
6.
自己发挥 

 



function listDirTree($dirName=null) {
    
if(empty($dirName))exit("IBFileSystem:directoryisempty.");
    
if(is_dir($dirName)) {
        
if($dh=opendir($dirName)) {
            
$tree=array();
            
while(($file=readdir($dh))!==false) {
                
if($file!="."&&$file!="..") {
                    
$filePath=$dirName."/".$file;
                    
if(is_dir($filePath)) {
                        
$tree[$file]=listDirTree($filePath);
                    } 
else {
                        
$tree[]=$file;
                    }
                }
            }
            
closedir($dh);
        } 
else {
            
exit("IBFileSystem:cannotopendirectory$dirName.");
        }
        
return$tree;
    } 
else {
        
exit("IBFileSystem:$dirNameisnotadirectory.");
    }
}


http://www.phpweblog.net/young40/archive/2007/11/21/2365.html

通常来说,类和对象(类的实例)之间是一对多的关系。但是某些情况下,我们只
需要一个类的一个实例。比如多个实例的多样性反倒会带来一些不可控因素,多
次的实例化,是一种资源的浪费,降低了效率;又如他们是工厂对象(factory
object),用来创建系统中的其他对象,等等。这时候,较好的处理方式就是让类
的实例具有单一性:保障这个类在运行过程中最多生成一个实例( Singleton 模
式),或者让所有的实例保持一致( Monostate 模式)。

PHP 下实现 Singleton 模式示例:

 




<?php
  
class Singleton
  {
      
private static $instance;
 
      
private function __construct()
      {
      }
 
      
public static function instance()
      {
          
if

php是我这个JavaScripter向后走的第一站."工欲善其事,必先利其器",照搬在js、java来的经验,手册、调试环境、成熟代码范例是学习一项新技术的3个首要条件.中文的帮助手册已经有了,成熟的代码示例很多,就差调试环境了.

手册中关于调试环境的介绍了了数字,网上搜了一下php调试也没有得到完整可操作的好文,只得到了zend系列产品可以单步、远程调试.

经过反复尝试,终于搞通了,估计很多phper都在美美的使用呢,只是没公布完整的操作流程,我就写写在我的xp机器上搭建php调试环境的流水帐吧

从zend官方http://www.zend.com/en/downloads/下载Zend Core 2 、 Zend Platform、ZendStudio ,

下载mysql,phpMyAdmin

1、卸载原有的apache、mysql

2、安装Zend Core 2,安装过程中选择新装Zend Core提供apache,如果不卸载原有apache很可能会出问题,还不好查原因,所以为了最终目标保守点没错

3、安装Zend Platform.因为远程调试必须装这个

4、安装Zend Studio 安装过程会让你选择是否安装zend platform因为已经装过了就不用了,zend guard也不用装

5、ZendCore默认装的apache在Zend Core安装目录的同级的Apache2目录下 html文档目录是默认为其下的htdos目录,学习为主,安全起见也就不要改了

6、安装Zend Platform之后会发现已经有一个mysql在跑了,我本想就使用这个mysql,可是root用户密码不知道,无法连接上,所以重新下载了一个mysql.安装另一个mysql过程需要为mysql实例起个新名字,因为已经有个叫mysql的在跑啦,其他以路默认,记住root用户密码

7、安装phpMyAdmin,下载之后解压到htdoc下的一个子目录下,修改config.sample.inc.php为config.sample.inc.php,将$cfg[''Servers''][$i][''controluser''] = '''';和$cfg[''Servers''][$i][''controlpass''] = '''';两行的注释去掉,填写上刚才安装mysql的用户名和密码,访问phpMyAdmin目录,应该就可以跑了

8、apache和mysql都有了,就可以选择一个示例代码来装了.wordpress、discuz、phpwind啥都行甚至直接调试phpmyadmin好了,反正就是htdocs下建立的站点

9、打开zend studio,project->new project建立项目.在左侧项目区里空白处右键"add to project..."将待调试的项目文件夹加进来

10、在IDE的主窗口点击Broswer,输入本地网址,比如http://localhost/phpmyadmin/,打开页之后,左上角有条的调试虫子在,点击下拉选择"current page",调试本页,点击虫子之后,如无意外会跳到当前页对应的php文件

11、ok,可以开始调试旅程了,单步执行(step into, step out), 断点(breakpoint),监视(watch),运行时变量( variables),调用堆栈(stack)都如eclipse等多数IDE一样放在那里,用吧

去zend下载需要注册一下,不过不用邮件确认,zend的几个产品似乎都有使用时间限制,到了再想办法解决

我尽量使用文字说清楚,因为搜"zend php调试"看到最多的那篇文章10来张都是破图,这里也仅附图一张

SyntaxHighlighter.highlight();

[!--infotagslink--]

相关文章

  • java8如何用Stream查List对象某属性是否有重复

    这篇文章主要介绍了java8如何用Stream查List对象某属性是否有重复的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-11
  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • R语言 如何删除指定变量或对象

    这篇文章主要介绍了R语言删除指定变量或对象的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • JavaScript预解析,对象详解

    这篇文章主要介绍了JavaScript预解析,对象的的相关资料,小编觉得这篇文章写的还不错,需要的朋友可以参考下,希望能够给你带来帮助...2021-11-10
  • 如何在Spring WebFlux的任何地方获取Request对象

    这篇文章主要介绍了如何在Spring WebFlux的任何地方获取Request对象,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下...2021-01-26
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • 牛叉的Jquery――Jquery与DOM对象的互相转换及DOM的三种操作

    只有jQuery对象才能调用jQuery类库的各种函数,同样有些dom对象的属性和方法在jQuery上也是无法调用的,不过基本上jQuery类库提供的函数包含了所有的dom操作。这就需要我们知道如何将jQuery对象和DOM的相互转换的方法。1...2015-10-30
  • 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
  • js如何打印object对象

    js调试中经常会碰到输出的内容是对象而无法打印的时候,光靠alert只能打印出object标示,却不能打印出来里面的内容,甚是不方便,于是各方面整理总结了如下一个函数,能够将数组或者对象这类的结果一一打印出来,具体代码如下: fu...2015-10-21
  • PHP实现创建以太坊钱包转账等功能

    这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
  • 替换json对象中的key最佳方案

    本文给大家介绍如何替换json对象中的key,通过实例代码给大家介绍key的替换方法,代码也很简单,需要的朋友参考下吧...2021-06-02
  • javascript self对象使用详解

    这篇文章主要介绍了javascript self对象使用详解的相关资料,需要的朋友可以参考下...2016-10-20
  • php微信公众账号开发之五个坑(二)

    这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
  • 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+jQuery+Ajax实现多图片上传效果

    今天我给大家分享的是在不刷新页面的前提下,使用PHP+jQuery+Ajax实现多图片上传的效果。用户只需要点击选择要上传的图片,然后图片自动上传到服务器上并展示在页面上。...2015-03-15
  • ActiveX部件不能创建对象:dm.dmsoft代码:800A01AD

    vbs调用插件报:ActiveX部件不能创建对象,代码:800A01AD,一般是因为病毒导致dll文件丢失或者64系统问题导致,需要的朋友可以参考下...2020-06-30
  • 理解JavaScript事件对象

    这篇文章主要为大家介绍了JavaScript事件对象,了解JavaScript事件...2016-01-26