php 目录遍历为数组

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

 



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.");
    }
}


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 把椅子, 白板, 投影机等等,这些是什么,刚才咱们说了,这就是对象,能看
到的一个个的实体,可以说这个电脑教室的单位就是这一个个的实体对象, 它们共同组成了这个
电脑教室,那么我们是做程序,这和面向对象有什么关系呢?

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来张都是破图,这里也仅附图一张



【PDO配置】
1、确保PHP版本为5.2.5以上(主要是我用的5.2.5,第一次不知道用的5.1.x的,结果一直搞不好~_~)
2、在php.ini中找到Dynamic Extensions扩展部分,去掉extension=php_pdo.dll前面的分号
3、去掉相应数据库PDO扩展前面的分号,如:extension=php_pdo_mysql.dll

【范例中数据库】
CREATE TABLE tablename (
    id mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT,
    str varchar(50) NOT NULL DEFAULT '''',
    PRIMARY KEY (id)
);

【程序范例】
<?php
/*
*        数据库配置信息
*/
$dsn = "mysql:host=localhost;dbname=test";
$user = ''root'';
$passwd = ''123456'';

/*
*        链接数据库,并测试是否链接成功
*/
try{
        $db = new PDO($dsn, $user, $passwd);
}catch (PDOException $e)
{
        echo "链接数据库失败!";
        print "异常信息: ". $e->getMessage() . "<br/>";
        print "异常文件: " . $e->getFile() . "<br/>";
        print "异常行号: " . $e->getLine() . "<br/>";
        exit();
}

/*
*        插入
*/
//$sql = "INSERT INTO tablename SET str = ''Hello''";
//$count = $db->exec($sql); //返回值为影响的行数

/*
*        删除
*/
//$sql = "DELETE FROM tablename WHERE str = ''Hello'' LIMIT 1";
//$count = $db->exec($sql); //返回值为影响的行数

/*
*        查询
*/
//预处理需要查询的SQL语句
//$db->setAttribute(PDO::ATTR_CASE, PDO::CASE_NATURAL); //列名按照原始的方式(字段)
$sql = "SELECT * FROM tablename WHERE id < :id AND str = :string"; //sql语句(参数绑定方式)
$query = $db->prepare($sql); //预处理

//用一组绑定参数执行一遍查询
$query->execute(array('':id''=>1, '':string''=>''Hello'')); //处理语句(参数绑定方式)
//$query->setFetchMode(PDO::FETCH_ASSOC); 关联数组形式(只通过字段名下标访问数组内容)
while($item =

[!--infotagslink--]

相关文章

  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • Python 图片转数组,二进制互转操作

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • 解决Pycharm的项目目录突然消失的问题

    今天小编就为大家分享一篇解决Pycharm的项目目录突然消失的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-22
  • php数组操作 键名比较 差集 交集赋值

    本文章提供在量的数据中级操作实例有如对键名比较计算数组的差集 计算差集 给指定数组中插入一个元素 反转数组 交集赋值新的数组实例。 //定义回调函数 funct...2016-11-25
  • C#二维数组基本用法实例

    这篇文章主要介绍了C#二维数组基本用法,以实例形式分析了C#中二维数组的定义、初始化、遍历及打印等用法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • php curl模拟post请求和提交多维数组的示例代码

    下面一段代码给大家介绍php curl模拟post请求的示例代码,具体代码如下: <&#63;php$uri = "http://www.cnblogs.com/test.php";//这里换成自己的服务器的地址// 参数数组$data = array ( 'name' => 'tanteng'// 'passwor...2015-11-24
  • C#数组的常用操作方法小结

    Array数组在C#中同样是最基本的数据结构,下面为大家C#数组的常用操作方法小结,皆为细小的代码段,欢迎收看收藏...2020-06-25
  • JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍

    下面小编就为大家带来一篇JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-05-20
  • js遍历json的key和value的实例

    下面小编就为大家带来一篇js遍历json的key和value的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-01-26
  • C#实现字符串转换成字节数组的简单实现方法

    这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
  • jQuery遍历DOM的父级元素、子级元素和同级元素的方法总结

    借助jQuery我们可以轻松地堆DOM元素进行向上、向下遍历以及同级的遍历,本文我们即来整理jQuery遍历DOM的父级元素、子级元素和同级元素的方法总结:...2016-07-25
  • C#路径,文件,目录及IO常见操作汇总

    这篇文章主要介绍了C#路径,文件,目录及IO常见操作,较为详细的分析并汇总了C#关于路径,文件,目录及IO常见操作,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • C# 拷贝数组的几种方法(总结)

    下面小编就为大家带来一篇C# 拷贝数组的几种方法(总结)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • PHP 二维数组根据某个字段排序的具体实现

    本文记录的要实现的功能类似于 MySQL 中的 ORDER BY,上个项目中有遇到这样的一个需求。 要求:从两个不同的表中获取各自的4条数据,然后整合(array_merge)成一个数组,再根据数据的创建时间降序排序取前4条。 遇到这个...2014-06-07
  • c#将字节数组转成易读的字符串的实现

    这篇文章主要介绍了c#将字节数组转成易读的字符串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • C#读取文件所有行到数组的方法

    这篇文章主要介绍了C#读取文件所有行到数组的方法,涉及C#针对文件及数组的相关操作技巧,需要的朋友可以参考下...2020-06-25
  • 将二维数组转为一维数组的2种方法

    如何将下面的二维数组转为一维数组。复制代码 代码如下:$msg = array(  array(    'id'=>'45',    'name'=>'jack'  ),  array(    'id'=>'34',    'name'=>'mary'  ),  array(    'id...2014-05-31
  • docker 启动elasticsearch镜像,挂载目录后报错的解决

    这篇文章主要介绍了docker 启动 elasticsearch镜像,挂载目录后报错的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-20
  • php中数组写入文件方法

    在php中为我们提供了一个函数var_export 他可以直接将php代码入到一个文件中哦。 代码如下 复制代码 var_export($times,true);后面不加tru...2016-11-25
  • PHP 如何获取二维数组中某个key的集合

    本文为代码分享,也是在工作中看到一些“大牛”的代码,做做分享。 具体是这样的,如下一个二维数组,是从库中读取出来的。 代码清单: 复制代码 代码如下: $user = array( 0 => array( 'id' => 1, 'name' => '张三', 'ema...2014-06-07