欢迎光临
我们一直在努力

面试题之PHP面向对象部分

1、什么是面向对象?(理解着回答)

答:面向对象OO = 面向对象的分析OOA + 面向对象的设计OOD + 面向对象的编程OOP;通俗的解释就是“万物皆对象”,把所有的事物都看作一个个可以独立的对象(单元),它们可以自己完成自己的功能,而不是像C那样分成一个个函数。

 现在纯正的OO语言主要是Java和C#,PHP、C++也支持OO,C是面向过程的。

2、简述 private、 protected、 public修饰符的访问权限。

答:private : 私有成员, 在类的内部才可以访问。

protected : 保护成员,该类内部和继承类中可以访问。

public : 公共成员,完全公开,没有访问限制。

3、堆和栈的区别?

答:栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;

堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小。

4、XML 与 HTML 的主要区别

答:(1) XML是区分大小写字母的,HTML不区分。

(2) 在HTML中,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略</p>或者</li>之类的结束 标记。在XML中,绝对不能省略掉结束标记。

(3) 在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符作为结尾。这样分析器就知道不用 查找结束标记了。

(4) 在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。

(5) 在HTML中,可以拥有不带值的属性名。在XML中,所有的属性都必须带有相应的值。

5、面向对象的特征有哪些方面?

答:主要有封装,继承,多态。如果是4个方面则加上:抽象。

下面的解释为理解:

封装:

封装是保证软件部件具有优良的模块性的基础,封装的目标就是要实现软件部件的高内聚,低耦合,防止程序相互依赖性而带来的变动影响.

继承:

在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并可以加入若干新的内容,或修改原来的方法使之更适合特殊的需要,这就是继承。继承是子类自动共享父类数据和方法的机制,这是类之间的一种关系,提高了软件的可重用性和可扩展性。

多态:

多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。

抽象:

抽象就是找出一些事物的相似和共性之处,然后将这些事物归为一个类,这个类只考虑这些事物的相似和共性之处,并且会忽略与当前主题和目标无关的那些方面,将注意力集中在与当前目标有关的方面。例如,看到一只蚂蚁和大象,你能够想象出它们的相同之处,那就是抽象。

6、抽象类和接口的概念以及区别?

答:抽象类:它是一种特殊的,不能被实例化的类,只能作为其他类的父类使用。使用abstract关键字声明。

它是一种特殊的抽象类,也是一个特殊的类,使用interface声明。

(1)抽象类的操作通过继承关键字extends实现,而接口的使用是通过implements关键字来实现。

(2)抽象类中有数据成员,可以实现数据的封装,但是接口没有数据成员。

(3)抽象类中可以有构造方法,但是接口没有构造方法。

(4)抽象类的方法可以通过private、protected、public关键字修饰(抽象方法不能是private),而接口中的方法只能使用public关键字修饰。

(5)一个类只能继承于一个抽象类,而一个类可以同时实现多个接口。

(6)抽象类中可以有成员方法的实现代码,而接口中不可以有成员方法的实现代码。

7. 什么是构造函数,什么是析构函数,作用是什么?

答:构造函数(方法)是对象创建完成后第一个被对象自动调用的方法。它存在于每个声明的类中,是一个特殊的成员方法。作用是执行一些初始化的任务。Php中使用__construct()声明构造方法,并且只能声明一个。

析构函数(方法)作用和构造方法正好相反,是对象被销毁之前最后一个被对象自动调用的方法。是PHP5中新添加的内容作用是用于实现在销毁一个对象之前执行一些特定的操作,诸如关闭文件和释放内存等。

8、如何重载父类的方法,举例说明

答:重载,即覆盖父类的方法,也就是使用子类中的方法替换从父类中继承的方法,也叫方法的重写。

覆盖父类方法的关键是在子类中创建于父类中相同的方法包括方法的名称、参数和返回值类型。PHP中只要求方法的名称相同即可。

9. 常用的魔术方法有哪些?举例说明

答:php规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是为了重载已有的魔术方法。

__construct() 实例化类时自动调用。

__destruct() 类对象使用结束时自动调用。

__set() 在给未定义的属性赋值的时候调用。

__get() 调用未定义的属性时候调用。

__isset() 使用isset()或empty()函数时候会调用。

__unset() 使用unset()时候会调用。

__sleep() 使用serialize序列化时候调用。

__wakeup() 使用unserialize反序列化的时候调用。

__call() 调用一个不存在的方法的时候调用。

__callStatic()调用一个不存在的静态方法是调用。

__toString() 把对象转换成字符串的时候会调用。比如 echo。

__invoke() 当尝试把对象当方法调用时调用。

__set_state() 当使用var_export()函数时候调用。接受一个数组参数。

__clone() 当使用clone复制一个对象时候调用。

10、$this和self、parent这三个关键词分别代表什么?在哪些场合下使用?

答:$this 当前对象

self  当前类

parent  当前类的父类

$this在当前类中使用,使用->调用属性和方法。

self也在当前类中使用,不过需要使用::调用。

parent在类中使用。

11、类中如何定义常量、如何类中调用常量、如何在类外调用常量。

答:类中的常量也就是成员常量,常量就是不会改变的量,是一个恒值。

定义常量使用关键字const.

例如:const PI = 3.1415326;

无论是类内还是类外,常量的访问和变量是不一样的,常量不需要实例化对象,

访问常量的格式都是类名加作用域操作符号(双冒号)来调用。

即:类名 :: 类常量名;

12、 作用域操作符::如何使用?都在哪些场合下使用?

答:调用类常量

调用静态方法

13、__autoload()方法的工作原理是什么?

答:使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。

当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行__autoload()函数。

这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后

就执行include或者require来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。

使用自动载入的魔术函数可以不必要写很多个include或者require函数。

面试题之PHP数据库部分

1. 常见的关系型数据库管理系统产品有?

答:Oracle、SQL Server、MySQL、Sybase、DB2、Access等。

2. SQL语言包括哪几部分?每部分都有哪些操作关键字?

答:SQL语言包括数据定义(DDL)、数据操纵(DML),数据控制(DCL)和数据查询(DQL)四个部分。

数据定义:Create Table,Alter Table,Drop Table, Craete/Drop Index等

数据操纵:Select ,insert,update,delete,

数据控制:grant,revoke

数据查询:select

3. 完整性约束包括哪些?

答:数据完整性(Data Integrity)是指数据的精确(Accuracy)和可靠性(Reliability)。

分为以下四类:

1) 实体完整性:规定表的每一行在表中是惟一的实体。

2) 域完整性:是指表中的列必须满足某种特定的数据类型约束,其中约束又包括取值范围、精度等规定。

3) 参照完整性:是指两个表的主关键字和外关键字的数据应一致,保证了表之间的数据的一致性,防止了数据丢失或无意义的数据在数据库中扩散。

4) 用户定义的完整性:不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的完整性即是针对某个特定关系数据库的约束条件,它反映某一具体应用必须满足的语义要求。

与表有关的约束:包括列约束(NOT NULL(非空约束))和表约束(PRIMARY KEY、foreign key、check、UNIQUE) 。

4.  什么是事务?及其特性?

答:事务:是一系列的数据库操作,是数据库应用的基本逻辑单位。

事务特性:

(1)原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行。

(2)一致性或可串性。事务的执行使得数据库从一种正确状态转换成另一种正确状态

(3)隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务,

(4) 持久性。事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。

或者这样理解:

事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。

5. 什么是锁?

  答:数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。

加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。

基本锁类型:锁包括行级锁和表级锁

6. 什么叫视图?游标是什么?

答:视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,视图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。

  游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

7. 什么是存储过程?用什么来调用?

答:存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一个命令对象来调用存储过程。

8. 索引的作用?和它的优点缺点是什么?

答:索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。

9. 如何通俗地理解三个范式?

答:第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;

第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;  第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。。

10. 什么是基本表?什么是视图?

答:基本表是本身独立存在的表,在 SQL 中一个关系就对应一个表。  视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表

11. 试述视图的优点?

答:(1) 视图能够简化用户的操作  (2) 视图使用户能以多种角度看待同一数据; (3) 视图为数据库提供了一定程度的逻辑独立性; (4) 视图能够对机密数据提供安全保护。

12. NULL是什么意思

答:NULL这个值表示UNKNOWN(未知):它不表示“”(空字符串)。对NULL这个值的任何比较都会生产一个NULL值。您不能把任何值与一个 NULL值进行比较,并在逻辑上希望获得一个答案。

使用IS  NULL来进行NULL判断

13. 主键、外键和索引的区别?

主键、外键和索引的区别

定义:

 主键–唯一标识一条记录,不能有重复的,不允许为空

 外键–表的外键是另一表的主键, 外键可以有重复的, 可以是空值

 索引–该字段没有重复值,但可以有一个空值

作用:

 主键–用来保证数据完整性

 外键–用来和其他表建立联系用的

 索引–是提高查询排序的速度

个数:

 主键–主键只能有一个

 外键–一个表可以有多个外键

 索引–一个表可以有多个唯一索引

14. 你可以用什么来确保表格里的字段只接受特定范围里的值?

答:Check限制,它在数据库表格里被定义,用来限制输入该列的值。

触发器也可以被用来限制数据库表格里的字段能够接受的值,但是这种办法要求触发器在表格里被定义,这可能会在某些情况下影响到性能。

15. 说说对SQL语句优化有哪些方法?(选择几条)

(1)Where子句中:where表之间的连接必须写在其他Where条件之前,那些可以过滤掉最大数量记录的条件必须写在Where子句的末尾.HAVING最后。

(2)用EXISTS替代IN、用NOT EXISTS替代NOT IN。

(3) 避免在索引列上使用计算

(4)避免在索引列上使用IS NULL和IS NOT NULL

(5)对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

(6)应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描

(7)应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描

16. SQL语句中‘相关子查询’与‘非相关子查询’有什么区别?

答:子查询:嵌套在其他查询中的查询称之。

子查询又称内部,而包含子查询的语句称之外部查询(又称主查询)。

所有的子查询可以分为两类,即相关子查询和非相关子查询

(1)非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询。

(2)相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。

故非相关子查询比相关子查询效率高

 

17. char和varchar的区别?

答:是一种固定长度的类型,varchar则是一种可变长度的类型,它们的区别是:

char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.(在检索操作中那些填补出来的空格字符将被去掉)在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节).

18. Mysql 的存储引擎,myisam和innodb的区别。

答:简单的表达:

MyISAM 是非事务的存储引擎;适合用于频繁查询的应用;表锁,不会出现死锁;适合小数据,小并发

innodb是支持事务的存储引擎;合于插入和更新操作比较多的应用;设计合理的话是行锁(最大区别就在锁的级别上);适合大数据,大并发。

19. 数据表类型有哪些

答:MyISAM、InnoDB、HEAP、BOB,ARCHIVE,CSV等。

MyISAM:成熟、稳定、易于管理,快速读取。一些功能不支持(事务等),表级锁。

InnoDB:支持事务、外键等特性、数据行锁定。空间占用大,不支持全文索引等。

20. MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?

a. 设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。

b. 选择合适的表字段数据类型和存储引擎,适当的添加索引。

c. mysql库主从读写分离。

d. 找规律分表,减少单表中的数据量提高查询速度。

e。添加缓存机制,比如memcached,apc等。

f. 不经常改动的页面,生成静态页面。

g. 书写高效率的SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE.

21. 对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题?

答:a. 确认服务器是否能支撑当前访问量。

b. 优化数据库访问。

c. 禁止外部访问链接(盗链), 比如图片盗链。

d. 控制文件下载。

e. 使用不同主机分流。

f. 使用浏览统计软件,了解访问量,有针对性的进行优化。

面试题之PHP基础

1、PHP语言的一大优势是跨平台,什么是跨平台?

PHP的运行环境最优搭配为Apache+MySQL+PHP,此运行环境可以在不同操作系统(例如windows、Linux等)上配置,不受操作系统的限制,所以叫跨平台

2、WEB开发中数据提交方式有几种?有什么区别?百度使用哪种方式?

Get与post两种方式

区别:

1. Get从服务器获取数据,post向服务器传送数据

2. Get传值在url中可见,post在url中不可见

4. Get传值一般在2KB以内,post传值大小可以在php.ini中进行设置

5. get安全性非低,post安全性较高,执行效率却比Post高

建议:

1、get式安全性较Post式要差些包含机密信息建议用Post数据提交式;

2、做数据查询建议用Get式;做数据添加、修改或删除建议用Post方式;

百度使用的get方式,因为可以从它的URL中看出

3、掌握PHP的哪些框架、模板引擎、系统等

框架:框架有很多,例如zendframe、CI、Yii等等,咱们学过的是thinkphp

模板引擎:也有很多,在课本中有,咱们学过的是smarty

系统:有很多,例如:康盛的产品(uchome、supesite、discuzX等),帝国系统、DEDE(织梦)、ecshop等,咱们学过的是DEDECMS、Ecshop

4、说一下你所掌握的网页前端技术有哪些?

熟练掌握DIV+CSS网页布局,JavaScriptjQuery框架、photoshop图片处理

5. AJAX的优势是什么?

ajax是异步传输技术,可以通过javascript实现,也可以通过JQuery框架实现,实现局部刷新,减轻了服务器的压力,也提高了用户体验

6. 安全对一套程序来说至关重要,请说说在开发中应该注意哪些安全机制?

①防远程提交;②防SQL注入,对特殊代码进行过滤;③防止注册机灌水,使用验证码;

7. 在程序的开发中,如何提高程序的运行效率?

①优化SQL语句,查询语句中尽量不使用select *,用哪个字段查哪个字段;少用子查询可用表连接代替;少用模糊查询;②数据表中创建索引;③对程序中经常用到的数据生成缓存;

8. PHP可否与其它的数据库搭配使用?

PHP与MYSQL数据库是最优搭配,当然PHP也可以去其它的数据库搭配使用,例如MSSQL等,PHP中预留了操作MSSQL的函数,只要开启就可以使用

9. 现在编程中经常采取MVC三层结构,请问MVC分别指哪三层,有什么优点?

MVC三层分别指:业务模型、视图、控制器,由控制器层调用模型处理数据,然后将数据映射到视图层进行显示,优点是:①可以实现代码的重用性,避免产生代码冗余;②M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式

10. 对json数据格式的理解?

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,json数据格式固定,可以被多种语言用作数据的传递

PHP中处理json格式的函数为json_decode( string $json [, bool $assoc ] ) ,接受一个 JSON格式的字符串并且把它转换为PHP变量,参数json待解码的json string格式的字符串。assoc当该参数为TRUE时,将返回array而非object;

Json_encode:将PHP变量转换成json格式

11. Print、echo、print_r有什么区别?

① echo和print都可以做输出,不同的是,echo不是函数,没有返回值,而print是一个函数有返回值,所以相对而言如果只是输出echo会更快,而print_r通常用于打印变量的相关信息,通常在调试中使用。

② print   是打印字符串

③ print_r 则是打印复合类型  如数组 对象

12. SESSION与COOKIE的区别?

①存储位置:session存储于服务器,cookie存储于浏览器

②安全性:session安全性比cookie高

③session为‘会话服务’,在使用时需要开启服务,cookie不需要开启,可以直接用

14. PHP处理数组的常用函数?(重点看函数的‘参数’和‘返回值’)

①array()创建数组;②count()返回数组中元素的数目;③array_push()将一个或多个元素插入数组的末尾(入栈);④array_column()返回输入数组中某个单一列的值;⑤array_combine()通过合并两个数组来创建一个新数组;⑥array_reverse()以相反的顺序返回数组;⑦array_unique()删除数组中的重复值;⑧in_array()检查数组中是否存在指定的值;

15. PHP处理字符串的常用函数?(重点看函数的‘参数’和‘返回值’)

①trim()移除字符串两侧的空白字符和其他字符;②substr_replace()把字符串的一部分替换为另一个字符串;③substr_count()计算子串在字符串中出现的次数;④substr()返回字符串的一部分;⑤strtolower()把字符串转换为小写字母;⑥strtoupper()把字符串转换为大写字母;⑦strtr()转换字符串中特定的字符;⑧strrchr()查找字符串在另一个字符串中最后一次出现;⑨strstr()查找字符串在另一字符串中的第一次出现(对大小写敏感);strrev()反转字符串;strlen()返回字符串的长度;str_replace()替换字符串中的一些字符(对大小写敏感);print()输出一个或多个字符串;explode()把字符串打散为数组;is_string()检测变量是否是字符串;strip_tags()从一个字符串中去除HTML标签;mb_substr()用来截中文与英文的函数

16. PHP处理时间的常用函数?(重点看函数的‘参数’和‘返回值’)

date_default_timezone_get()返回默认时区。

date_default_timezone_set()设置默认时区。

date()格式化本地时间/日期。

getdate()返回日期/时间信息。

gettimeofday()返回当前时间信息。

microtime()返回当前时间的微秒数。

mktime()返回一个日期的 Unix时间戳。

strtotime()将任何英文文本的日期或时间描述解析为 Unix时间戳。

time()返回当前时间的 Unix时间戳。

17. PHP处理数据库的常用函数?(重点看函数的‘参数’和‘返回值’)

请参照php手册,认真查看,此项非常重要

18. PHP操作文件的常用函数?(重点看函数的‘参数’和‘返回值’)

①打开文件;②删除文件;③读取文件;④写入文件;⑤修改文件;⑥关闭文件;⑦创建文件等等,此项非常重要,在工作中经常用来生成缓存或者静态文件,请参照php手册,认真查看

19. PHP操作目录(文件夹)的常用函数?(重点看函数的‘参数’和‘返回值’)

①打开目录;②删除目录;③读取目录;④创建目录;⑤修改目录;⑥关闭目录等等,此项非常重要,在工作中经常用来创建或者删除上传文件的目录,创建或者删除缓存、静态页面的目录,请参照php手册,认真查看

PHP OOP面向对象总结

<?php
//对象名存在栈内存中,数据存在堆内存中
class leyangjun{
var $name;  //定义变量
var $age;
var $sex;

function say(){//定义方法
echo ‘哇咔咔’;
}

//调用内部属相 或 方法 都用$this
function runMethods(){
echo ‘<br>我的名字叫:’.$this->name;  //$this->say();
}
}
$man = new leyangjun(); //实例化对象(对象都是互相独立,对象名保存在栈内存中,数据保存在堆内存中)
$man2 = new leyangjun();
$man2->name = ‘GG’.'<br>’;
$man->name = ‘leyangjun’.'<br>’;
echo $man->name;
echo $man2->name;
$man->say();
$man->runMethods();

/**
*构造方法与析构方法
*描述:当创建一个对象时,它将自动调用构造函数,也就是使用new这个关键字来实例化的时候自动调用构造方法
*在一个类中只能申明一个构造方法
**/
class NewPerson{
var $name;
var $sex;
var $age;
//定义一个构造方法(这是PHP5中的变化,以前的版本中,构造函数的名称必须与类名相同)
function __construct($name,$sex,$age){
//通过构造方法传来的$name给成员属性$this->name赋初始值
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
}
function say(){
echo “<br>名字:”.$this->name.’—性别:’.$this->sex.’—年龄:’.$this->age;
}

/**
*析构函数:在销毁一个类之前执行的一些操作或完成一些功能,如:关闭文件、释放结果集等
*析构函数不能带有任何参数
**/
function __destruct(){
echo “<br>再见”.$this->name;
}
}
$NewMan = new NewPerson(“菠萝蜜”,”男”,25);
$NewMan->say();

//类的封装
class Encapsulation{
private $name; //认得名字被private封装上了
function __construct($name){
$this->name=$name;
}
public function say(){//前面不写默认是public
echo “<br>名字:”.$this->name;
}
public function getName(){
return(“<br>获取私有属性:”.$this->name);
}
function __destruct(){
echo “<br>林苏:”.$this->name;
}
}
$p1 = new Encapsulation(“长林军”);
$name = $p1->getName();
$p1->say();
echo $name;

/**
*__SET __GET() __isset() __unset()方法
*  一般来说,总是把类的属性定义为private,这更符合现实的逻辑。但是,对属性的读取和赋值操作是非常频繁的,
*因此在PHP5中,预定义了两个函数”__get()”和”__set()”来获取和赋值其属性,以及检查属性的”__isset()”和删除属性的方法”__unset()”。
*/
class Person3{
private $name;
private $sex;
private $addess;
private $myData=3;

//__set()方法来设置私有属性
function __set($property_name,$property_value){
echo “<br><hr>在这直接设置私有属性值的时候,自动调用这个__set()方法为私有属性设置值<br>”;
$this->$property_name = $property_value;
}
//__get()方法用来获取私有属性
function __get($property_name){
//echo “在直接获取私有属性值的时候,自动调用了这个__get()方法<br>”;
if(isset($this->$property_name)) {
return($this->$property_name);
}else{
return (‘没有你要的值!’);
}
}

//__isset判断私有成员是否存在
public function __isset($p){
//echo “当在类外部使用isset()函数测定 私有成员 $p时,自动调用<br>”;
return isset($this->$p);
}

//__unset 删除私有成员
public function __unset($privateAttribute){
//echo “当在类外部使用unset()函数来删除私有成员时自动调用的<br>”;
unset($this->$privateAttribute);
}

}
$p3 = new Person3();
$p3->name=’leyangjun’;
var_dump($p3->age);
echo ‘姓名:’.$p3->name.'<br><br>’;
if(isset($p3->addess)) {
echo $p3->addess.'<hr/>’;
}else{
echo ‘不存在<hr>’;
}

unset($p3->myData);
echo $p3->myData.'<hr>’;

//继承
class titalMan{}
class Student extends titalMan{

}

/**
*方法重载
*PHP里面没有方法重载。不能重载也就是在你的项目中不能定义相同方法名的方法
*我们这里所指的重载新的方法所指的是什么呢?其实我们所说的重载新的方法就是子类覆盖父类的已有的方法,
**/

/**
*子类调用父类的方法:一种是使用父类的 “类名::” 来调用父类的方法     className::testFunction();
*                    一种是使用 “parent::”的方式来调用父类中的方法  parent::say();
**/

/**
*访问类型
*public(公有的、默认的):公有修饰符,类中的成员将没有访问限制,所有的外部成员都可以访问(读和写)
*private(私有的):私有修改符,被定义为private的成员,对同一类里的所有成员是可见的,没有访问限制;但类的外部是不允许改变和操作,对于该类的子类,也不能访问。
*protected(受保护的):保护成员修饰符,被修饰为protected的成员不能被该类的外部代码访问。但是对于该类的子类有访问权限,可以进行属性、方法的读及写操作,该子类的外部代码包括其的子类都不具有访问其属性和方法的权限。
**/

/**
*final关键字的应用
*这个关键字用来定义类和定义方法,不能使用final定义成员属性,因为final是常亮的意思,在php定义常亮的是define()函数
*使用final关键标记的类不能被继承
**/
final class leyangjunA{}
//class leyangjunB extends leyangjunA{} 不能被继承

//使用final关键标记的方法不能被子类覆盖,是最终版本;
class leyangjunC{
final function say(){}
}
class leyangjunD extends leyangjunC{
//function say(){}   不能重写父类的方法
}

/**
*static 和 const关键字的使用
*static关键字是描述成员属性和成员方法是静态的;
*类的静态变量,非常类似全局变量,能够被所有类的实例共享,类的静态方法也是一样的,类似于全局函数
*
*声明类成员或方法为static,就可以不实例化类而直接访问。不能通过一个对象来访问其中的静态成员(静态方法除外)
*在做项目的时候就是使用类名去访问
*
*const:是一个定义常量的关键字,在php中定义常量使用的是define(),但是在类里面定义常量使用 “const休息成员属性的访问方式”
*和static修饰的成员访问的方式差不多,也是用“类名”,在方法里面使用self关键字。不能使用”$”符号,也不能使用对象来访问。
*/
class StaticPerson{
public static $myCountry=’中国’;
public static $myStatic=’foo’;
const constant = ‘<br>constont value’;//定义一个常量

public function staticValue(){
//内部调用静态属性
return ‘<br>我的’.self::$myStatic;
}
public static function myNeiBu(){
//内部调用静态属性
return ‘内部静态方法:’;
}

public static function say(){
echo self::myNeiBu();
echo ‘我是中国人’;
}

public function showConstant(){
echo self::constant;  //使用self::访问常量
}
}
$foo = new StaticPerson();
$foo->showConstant();
//echo $foo::constant; 是不允许的
echo $foo->staticValue().'<br>’;
echo StaticPerson::$myCountry; //输出静态属性
StaticPerson::say();           //类名访问静态方法

StaticPerson::$myCountry=”<br>美国”;
echo StaticPerson::$myCountry.'<hr>’;

/**
*__toString()
*在直接输出对象引用时自动调用执行的方法。
*
*/
class TestClass{
public $foo;

public function __construct($foo){
$this->foo = $foo;
}
public function __toString(){
return ‘__toString方法:’.$this->foo;
}
}
$class = new TestClass(‘hello world!’);
//直接输出$class是会报错的,如果里面加了__toString()方法,直接输出对象的时候,就不会产生错误,而直接调用__toSring()方法(一定要有个return语句)
echo $class.'<hr>’;

/**
*克隆对象 –clone 或 __clone
*根据一个对象完全克隆一个一模一样的对象,互不干挠
*/
class PersonOne{
//成员属性
var $name;
var $sex;
var $age;
function __construct($name=””,$sex=””,$age=””){
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
}
function say(){
echo “我的名字:”.$this->name.’性别:’.$this->sex.’年龄:’.$this->age.'<br>’;
}
}
$pOne = new PersonOne(‘leyangjun’,’男’,’25’);
//使用clone 克隆新对象$pTwo,和$pOne对象具有相同的属性和方法
$pTwo = clone $pOne;
$pOne->say();
$pTwo->say();
class PersonThree{
//成员属性
var $name;
var $sex;
var $age;
function __construct($name=””,$sex=””,$age=””){
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
}
function say(){
echo “我的名字:”.$this->name.’性别:’.$this->sex.’年龄:’.$this->age.'<br>’;
}
//对象克隆是自动调用的方法,如果想在克隆后改变对象内容,需要在__clone中重写原本的属性和方法
function __clone(){
//$this指的复本
$this->name = ‘我是假的’.$this->name;
$this->age = 30;
}
}
$Three1 = new PersonThree(‘乐杨俊’,’男’,28);
$Three2 = clone $Three1;
$Three1->say();
$Three2->say();

/**
*__call 处理调用报错
*调用内部方法不存在程序就报错停止,使用__call可以提示调用的方法及使用参数不存在,但程序继续执行。
*/
class ErrorClass{
function __call($functionName,$args){
echo “<hr>你所调用的函数:$functionName 参数:”;
print_r($args);
echo ‘不存在<br>’;
}
}
$ErrorClass = new ErrorClass();
$ErrorClass->demoTest(“one”,”two”,”three”);
echo ‘程序调用不出安在的不会退出可以执行到这里<hr>’;

/**
*抽象类和抽象方法
*抽象方法:没有定义方法实体,在方法申明的时候没有大括号以及其中的内容,直接加分号结束,前面加一个关键字“abstract”  —>abstract function fun1();
*抽象类:里面可以有不是抽象方法和成员属性,但是要有一个抽象的方法,这个类就必须申明为抽象类 使用“abstract”来修饰 —>abstract calss Demo{}
*/
abstract class chouxiang{
abstract function talk();
abstract function talk2();
public function talk3(){
echo ‘父类非抽象方法talk3<br>’;
}
}
//$CX = new chouxiang(); //抽象类不能实例化,只能继承(子类必须把父类中的抽象方法全部都实现)
class TestCx extends chouxiang{
//子类必须把父类中的抽象方法全部都实现
function talk(){
echo ‘重写父类talk方法<br>’;
}
function talk2(){
echo ‘重写父类talk2方法<br>’;
}
}
$TestCx = new TestCx();//子类实现了父类的抽象方法,所以可以实例化
$TestCx->talk();
$TestCx->talk3();

/**
*php接口技术(关键字:interface)
*描述:php语言与大多数编程语言一样不支持多重继承,也就是每个类只能继承一个父类
*解析:接口是一种特殊的抽象类,抽象类又是一种特殊的类,所以接口是一种特殊的类。(接口里面所有的方法必须都是申明为抽象方法,另外接口
*      里面不能申明变量,而且接口里面所有的成员都是public权限的。所以子类实现的时候也一定要使用public权限。)
**/
//定义一个接口One
interface One{
//定义一个常量(接口里面不能定义变量成员)
const constant = ‘constant value’;
//定义一个抽象方法fun1 — 接口里面的所有方法都要是public(默认的)
public function fun1();
public function fun2();
}
//注:因为接口是一种特殊的抽象类,里面所有的方法都是抽象方法,所以接口也不能产生实例对象,它也做为一种规范,所有抽象方法需要子类去实现
//使用 extends 关键字让一个接口继承另一个接口
interface Two extends One{
function fun3();
function fun4();
}
//注:定义一个接口的子类去实现接口中的全部抽象方法使用关键字“implements”而不是extends
class JK implements One{
public function fun1(){
echo ‘<hr>接口方法fun1’;
}
public function fun2(){
echo ‘<br>接口方法fun2<br>’;
}
}
$jk = new JK();
$jk->fun1();
$jk->fun2();
/**
*注:前面说过,PHP是单继承,一个类只有一个父类,但是一个类可以实现多个接口,遵循多个规范。
*class JK2 implements 接口一,接口二,……{
//必须把所有接口中的方法都要实现才可以实例化对象。
}

PHP中不仅可以实现多个接口,也可以继承一个类的同时实现多个接口,一定要先继承类再去实现接口;
class JK3 extends 类名一 implements 接口一,接口二,…….{
//所有接口中的方法都要实现才可以实例化对象
//……..
}
**/

/**
*多态应用
*解析:所谓多态是指一段程序能后处理多种类型对象的能力,比如:公司不同员工不同职位发放工资,多以同一个发放工资的方法就出现了多种形态。
*对程序来说,多态就是把子类对象赋值给父类引用,能后调用父类的方法,去执行子类覆盖父类的那个方法,但在php里是弱类型的,对象引用都是一样的不分类引用,还是子类引用。
**/
//定义一个形状的接口,里面有两个抽象方法让子类去实现
interface Shape{
function area();
function perimeter();
}
//定义了一个矩形子类实现了形状接口中的周长和面积
class Rect implements Shape{
private $width;
private $height;
function __construct($width,$height){
$this->width = $width;
$this->height = $height;
}
function area(){
return ‘矩形面积是:’.($this->width*$this->height);
}
function perimeter(){
return ‘矩形周长是:’.(2*($this->width+$this->height));
}
}
//定义一个圆形子类实现了形状接口中的周长和面积
class Circular implements Shape{
private $radius;
function __construct($radius){
$this->radius = $radius;
}
function area(){
return ‘圆形面积是:’.(3.14*$this->radius*$this->radius);
}
function perimeter(){
return ‘圆形面积是:’.(2*3.14*$this->radius);
}
}
//把子类矩形对象赋给形状的一个引用
ECHO ‘<hr>’;
$shape = new Rect(5,10);
echo $shape->area().'<br>’;
echo $shape->perimeter().'<br>’;

//把子类圆形对象赋给形状的一个引用
$shape = new Circular(10);
echo $shape->area().'<br>’;
echo $shape->perimeter().'<br>’;

//通过上例我们看到,把 矩形对象 和  圆形对象  分别赋给了变量$shape,调用$shape引用中的面积和周长的方法,出现了不同的结果,这就是一种多态的应用,
//其实在我们PHP这种弱类形的面向对象的语言里面,多态的特性并不是特别的明显,其实就是对象类型变量的变项应用

/**
*把对象串行化(序列化:serialize(),反序列化:unserialize() )
*描述:有时候需要把一个对象在网络上传输,为了方面传输,可以把整个对象转化为二进制串,等到达另一端时,在还原为原来的对象,这个过程叫串行化。
*例子:想把一辆汽车通过轮船运到美国去,因为汽车的体积较大,我们可以把汽车拆成小的部件,然后我们把这些部件通过轮船运到美国去,到美国在重新组装回汽车。
*两种情况必须进行对象穿行化:
*        一:把一个对象在网络中传输的时候要将对象串行化
*      二:把对象写入文件或是数据库的时候用到串行化
*serialize():   串行化/序列化 一个对象
*unserialize(): 反串化/反序列化 把对象转化的二进制字符串在转化为对象
*/
class PersonMans{
var $name;
function __construct($name=””){
$this->name=$name;
}
function say(){
echo ‘<br>我的名字:’.$this->name;
}
}
$PersonMans = new PersonMans(‘leyangjun wa haha’);
$p1_string = serialize($PersonMans);//把对象串行化,返回一个字符串
echo ‘<hr>’.$p1_string.'<br>’;
$p2_string = unserialize($p1_string);
$p2_string->say();

/**
*魔术方法__sleep()和__wakeup()
*描述:在对象串行化的时候,会调用一个__sleep()方法来完成一些睡前的事情;而在重新醒来,即由二进制串重新组成一个对象的时候,则会自动调用PHP的另一个函数__wakeup(),做一些对象醒来就要做的动作。
*注:__sleep()函数不接受任何参数
*/
class PersonTwo{
var $name;
function __construct($name=””,$age=””){
$this->name=$name;
$this->age=$age;
}
function say(){
echo ‘<br>我的名字:’.$this->name.’ 年龄:’.$this->age;
}
//指定串行化把返回的数组中$name 串行化,忽略没在数组中的属性$age
function __sleep(){
$arr = array(“name”,”age”);
return $arr;
}
//重新生成对象是,并重新赋值$age为40
function __wakeup(){
$this->age = 36;
}
}
$pThree = new PersonTwo(“乐杨俊”,20);
//把对象序列化,返一个字符串,调用了__sleep()方法,忽略没在数组中的属性$age
$pThree_string = serialize($pThree);
echo ‘<hr>’.$pThree_string;
$pThree_string2 = unserialize($pThree_string); //反序列化形成对象$pThree_string2 重新赋值$age=40
$pThree_string2->say();

/**
*类的自动加载
*/
function __autoload($className){
require_once $className.’.php’;
}
//MyClass1类不存在自动调用__autoload()函数,传入参数“MyClass1”
$objs = new MyClass1();

?>

PHP经典面试题目汇总

1、双引号和单引号的区别

  • 双引号解释变量,单引号不解释变量
  • 双引号里插入单引号,其中单引号里如果有变量的话,变量解释
  • 双引号的变量名后面必须要有一个非数字、字母、下划线的特殊字符,或者用{}讲变量括起来,否则会将变量名后面的部分当做一个整体,引起语法错误
  • 双引号解释转义字符,单引号不解释转义字符,但是解释’\和\\
  • 能使单引号字符尽量使用单引号,单引号的效率比双引号要高(因为双引号要先遍历一遍,判断里面有没有变量,然后再进行操作,而单引号则不需要判断)

2、常用的超全局变量(8个)

  • $_GET —–>get传送方式
  • $_POST —–>post传送方式
  • $_REQUEST —–>可以接收到get和post两种方式的值
    ***
  • $GLOBALS —–>所有的变量都放在里面
  • $_FILE —–>上传文件使用
  • $_SERVER —–>系统环境变量
    * **
  • $_SESSION —–>会话控制的时候会用到
  • $_COOKIE —–>会话控制的时候会用到

3、HTTP中POST、GET、PUT、DELETE方式的区别

HTTP定义了与服务器交互的不同的方法,最基本的是POST、GET、PUT、DELETE,与其比不可少的URL的全称是资源描述符,我们可以这样理解:url描述了一个网络上资源,而post、get、put、delegate就是对这个资源进行增、删、改、查的操作!

3.1表单中get和post提交方式的区别
  • get是把参数数据队列加到提交表单的action属性所指的url中,值和表单内各个字段一一对应,从url中可以看到;post是通过HTTPPOST机制,将表单内各个字段与其内容防止在HTML的head中一起传送到action属性所指的url地址,用户看不到这个过程
  • 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据
  • get传送的数据量较小,post传送的数据量较大,一般被默认不受限制,但在理论上,IIS4中最大量为80kb,IIS5中为1000k,get安全性非常低,post安全性较高
3.2
  • GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改、增加数据,不会影响资源的内容,即该请求不会产生副作用。无论进行多少次操作,结果都是一样的。
  • 与GET不同的是,PUT请求是向服务器端发送数据的,从而改变信息,该请求就像数据库的update操作一样,用来修改数据的内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT操作,其结果并没有不同。
  • POST请求同PUT请求类似,都是向服务器端发送数据的,但是该请求会改变数据的种类等资源,就像数据库的insert操作一样,会创建新的内容。几乎目前所有的提交操作都是用POST请求的。
  • DELETE请求顾名思义,就是用来删除某一个资源的,该请求就像数据库的delete操作。

4、PHP介绍

Hypertext Preprocessor—-超文本预处理器

Personal Home Page 原始名称

目标用途: 允许web开发人员快速编写动态生成的web页面,与其他页面相比,PHP是将程序嵌入到HTML文档中去执行,效率比完全生成HTML编辑的CGI高很多

HTML: Hypertext Markup Language

创始人: 拉姆斯勒·勒多夫Rasmus Lerdorf,1968年生,加拿大滑铁卢大学

勒多夫最开始是为了维护个人网页,用prel语言写了维护程序,之后又用c进行了重写,最终衍生出php/fi

时间轴:

  • 1995.06.08将PHP/FI公开释出
  • 1995 php2.0,加入了对MySQL的支持
  • 1997 php3.0
  • 2000 php4.0
  • 2008 php5.0
  • 由于php6.0没有完全解决Unicode编码,所以基本没有生产线上的应用,基本只是一款概念产品,很多功能已经在php5.3.3和php5.3.4上实现

常见的IDE(Intergrated Development Environment): 集成开发环境

常见文本编辑器,具备代码高亮:

PHP优势

PHP特性:

  • php独特混合了C,Java,Prel以及PHP自创的语法
  • 可以比CGI或者Prel更快速去执行动态网页,与其他变成语言相比,PHP是讲程序嵌入到HTML文档中去执行,执行效率比完全生成HTML编辑的CGI要高很多,所有的CGI都能实现
  • 支持几乎所有流行的数据库以及操作系统
  • PHP可以使用C,C++进行程序的扩展

PHP优势:

  • 开放源代码
  • 免费性
  • 快捷性
  • 跨平台强
  • 效率高
  • 图形处理
  • 面向对象
  • 专业专注

PHP技术应用:

  • 静态页面生成
  • 数据库缓存
  • 过程缓存
  • div+css w3c标准
  • 大负荷
  • 分布式
  • flex
  • 支持MVC
  • Smarty模块引擎

PHP认证级别

  • 初级 IFE:Index Front Engineer 前端工程师
  • 中级 IPE:Index PHP Engineer PHP工程师
  • 高级 IAE:Index Architecture Engineer 架构工程师

6、echo、print_r、print、var_dump之间的区别

* echoprint是php语句,var_dump和print_r是函数
* echo 输出一个或多个字符串,中间以逗号隔开,没有返回值是语言结构而不是真正的函数,因此不能作为表达式的一部分使用
* print也是php的一个关键字,有返回值 只能打印出简单类型变量的值(如int,string),如果字符串显示成功则返回true,
否则返回false
* print_r 可以打印出复杂类型变量的值(如数组、对象)以列表的形式显示,并以array、object开头,
但print_r输出布尔值和NULL的结果没有意义,因为都是打印"\n",因此var_dump()函数更适合调试
* var_dump() 判断一个变量的类型和长度,并输出变量的数值

7、HTTP状态码

点击这儿查看HTTP状态码详解

常见的HTTP状态码:

  • 200 – 请求成功
  • 301 – 资源(网页等)被永久转义到其他URL
  • 404 – 请求的资源(网页等)不存在
  • 505 – 内部服务器错误

HTTP状态码分类:

  • 1** – 信息,服务器收到的请求,需要请求者继续执行操作
  • 2** – 成功,操作被成功接收并处理
  • 3** – 重定向,需要进一步的操作以完成请求
  • 4** – 客户端错误,请求包含语法错误或者无法完成请求
  • 5** 服务器错误,服务器在处理请求的过程
    中发生了错误

8、什么是魔术引号

魔术引号是一个将自动将进入PHP脚本的数据进行转义的过程,最好在编码时不要转义而在运行时根据需要而转义

9、如何获取客户端的ip(要求取得一个int)和服务器ip的代码

客户端:$_SERVER["REMOTE_ADDR"];或者getenv('REMOTE_ADDR')
ip2long进行转换
服务器端:gethostbyname('www.baidu.com')

10、使用那些工具进行版本控制

cvs、svn、vss、git

11、优化数据库的方法

MySQL数据库优化的八大方式(经典必看)点击获取
  • 选取最适用的字段属性,尽可能减少定义字段宽度,尽量把字段设置NOTNULL,例如’省份’、’性别’最好适用ENUM
  • 使用连接(JOIN)来代替子查询
  • 适用联合(UNION)来代替手动创建的临时表
  • 事务处理
  • 锁定表、优化事务处理
  • 适用外键,优化锁定表
  • 建立索引
  • 优化查询语句

12、是否使用过模板引擎?使用的模板引擎的名字是?

Smarty:Smarty算是一种很老的PHP模板引擎了,它曾是我使用这门语言模板的最初选择。虽然它的更新已经不算频繁了,并且缺少新一代模板引擎所具有的部分特性,但是它仍然值得一看。

13、对于大流量网站,采用什么方法来解决访问量的问题

  • 确认服务器硬件是否能够支持当前的流量
  • 数据库读写分离,优化数据表
  • 程序功能规则,禁止外部的盗链
  • 控制大文件的下载
  • 使用不同主机分流主要流量

14、语句include和require的区别是什么?为避免多次包含同一文件,可以用(?)语句代替他们

  • require是无条件包含,也就是如果一个流程里加入require,无论条件成立与否都会先执行require,当文件不存在或者无法打开的时候,会提示错误,并且会终止程序执行
  • include有返回值,而require没有(可能因为如此require的速度比include快),如果被包含的文件不存在的化,那么会提示一个错误,但是程序会继续执行下去

注意:包含文件不存在或者语法错误的时候require是致命的,而include不是

  • require_once表示了只包含一次,避免了重复包含

15、谈谈mvc的认识

由模型、视图、控制器完成的应用程序,由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图

16、 说明php中传值与传引用的区别,并说明传值什么时候传引用?

变量默认总是传值赋值,那也就是说,当将一个表达式的值赋予一个变量时,整个表达式的值被赋值到目标变量,这意味着:当一个变量的赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量

php也提供了另外一种方式给变量赋值:引用赋值。这意味着新的变量简单的__引用__(换言之,成为了其别名或者指向)了原始变量。改动的新的变量将影响到原始变量,反之亦然。使用引用赋值,简单地将一个&符号加到将要赋值的变量前(源变量)

对象默认是传引用
对于较大是的数据,传引用比较好,这样可以节省内存的开销

PHP部分知识点总结

一.php中单双引号的区别

  1. “” 双引号里面的字段会经过编译器解释,然后再当作HTML代码输出。
  2. ” 单引号里面的不进行解释,直接输出。

从字面意思上就可以看出,单引号比双引号要快了。单引号支持\’和\\的转义,但其他一些转义字符就必须是在双引号里了。 例如:

$name='my name is bystander';
echo $name //结果是:my name is bystander
echo '$name' //结果是:$name
echo "$name" //结果是:my name is bystander

二.require和include的区别

在于,出现错误时,require是error,也就是说脚本会停止执行,而include是warning。也就说说代码会继续执行,另外,无论require的位置如何。即使是放在一个if代码块里面。他也会将指定文件包含进来。。即使该if部分不执行。顺带说下include 和include_once。其实类似于c里面的ifdef。。就是只包含一次。不重复包含。

三。php类

php类的构造函数命名为_construct.析构函数为_destruct,需要调用父类的构造函数时,使用parent::_construct()来调用

四。pear包

PEAR是”PHP Extension and Application Repository”的缩写,也就是一个PHP扩展和应用的管理工具, 具体可参考:http://www.berlinix.com/php_pear.html

五。PDO

PDO(PHP Data Objects)扩展为PHP访问数据库定义了一个轻量级的、一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据。PDO随PHP5.1发行,在PHP5.0的PECL扩展中也可以使用。其实就是一个访问数据库的一个类,连数据库的时候实例一个。调用方法就这样。前提是这个装好了。

linux下具体可以参考:LINUX下手动安装PDO_MYSQL

window下和例子(例子也可以在linux下使用)参考此文:PHP5中PDO的简单使用

六。Zend

  • 准确地讲 Zend 框架究竟是什么呢?Zend 框架具有以下特征:
  • 是基于 PHP 建立的。
  • 是面向对象的。
  • 使用 MVC 范例。
  • 具有开放源码贡献者。
  • 有贡献者负责保证他们的代码不是他人的知识产权。

通过建立 MVC 模式,Zend 框架的目标是使编程生活更加轻松,这不仅体现在通用领域,而且对您始终想要做的具体的事情也是如此,比如访问数据库或输出 PDF 文件。 具体可参考:理解 Zend 框架,第 1 部分: 基础

七。GD库

百科上的解释: GD库,是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。 在网站上GD库通常用来生成缩略图,或者用来对图片加水印,或者用来生成汉字验证码,或者对网站数据生成报表等。在PHP处理图像,可使用GD库,   如何检测Lamp是否已经有了GD库呢。将下面的代码

<?php phpinfo(); ?>

保存为phpinfo.php,然后传到服务器的网站目录下,在浏览器访问这个文件,如: localhost/phpinfo.php,然后找到一行为GD Support,后面如果是enabled,那就说明系统已经有了GD库   使用的例子可以参见官方一个例子,在指定的图片上添加文字。

例子参见:http://www.php.net/manual/en/image.examples-png.php

八。Smarty引擎

Smarty主要就是分离了前台和后台的实现。使得多人合作开发程序更加方便。因为前后台在代码上基本完全分离,一般实现就是一个模板文件,以tpl结尾,一个php文件。在tpl文件里面用变量来指示内容。而在php文件中将内容传递过去。来完成页面显示。

参考:smarty安装及初级使用只看第一部分的例子即可。