第一篇:PHP 高级篇总结
PHP模板技术
当我第一次见到php模板的时候,简直被迷上了。原来php世界里还有这么好的东西。我疯狂地学习。
好在当时的php模板还不是很庞大,很快我了解了它的原理,并也能自己写一些了。后来,smarty横空出世,更是拥有了许多为它着迷的fans.许多人开始写模板引擎,将smarty或其他模板加以改造,使之符合自己的需要。纵观当今模板世界,php模板引擎主要分为两种:
一种是替换特定字串型的。美工做出来的页面,中间会嵌入一些什么{block.title}这样的字符串,然后程序读入这个模板文件,将中间的{block.title}的字样替换成实际从数据库中读取的内容。
还有一种符杂一些,是一种编译型的。以smarty为代表,模板文件中实际上包含了一些简化的php代码,比如有的写的是< {=$site_name}>,<{if $counts>0 }>这样的语句,实际是一种自行定义的语言格式。web开发久的人一眼能看出它们指的是什么。这一类往往会在第一次访问时被预编译,转换成一个 php文件何存起来。比如 <{=$site_name}>就变成了,<{if $count>0 }> 就变成了0){?>。从第二次起,就直接包含已经编译出来的php文件。当然,各种模板的处理的具体细节不一样。但是,我们为什么要用模板?
这个问题我也不能很好的回答。但是有很多人这么说:要让美工和程序员的工作分开。要让代码层和表现层分开。
那么我们看这两种方式实现了吗? 让您的美工人员打开一个smarty文件,让他按他的思路去改一下视图设计。他会告诉您,天哪,你怎么把我的设计变成这样一幅样子了?这些foreach,if都是什么意思?噢,天哪,我的表格怎么撑得这么大了?….原来编译型的模板技术让美工更没法子做美工了。
那么替换字符串型的呢?看起来是轻松多了。不过您可以测测您的程序速度,看看他是否已经慢了一倍以上。很容易,您用了太多的有preg_match,或是 str_ireplace之类的语句来替换。程序重复一次又一次在您那几万个甚至更多字节的模板文件中查找某个字串,来替换内容。
不仅如此,你还发现您哪天想在视层面插一点东西时,处处受制于模板。您肯定很想直接在模板中写一段之类的语句,但是,很抱歉,您不能这么写。如果只是想echo 一个什么东西,您可以在模板中加一个{{var}}的串,然后在php程序中写 $var=”这一个串”;
$template->assign(”var”,$var);
但是如果您不是想输出呢,想做其他操作?抱歉,您还是得改php代码。这些模板都支持规矩矩的表格状的输出,但是,如果我想输出20条记录,我要弄一个第一行2列记录的,第二行3列的,第三行又是2行的之类的,或者是其他类似找码,您打算怎么办? 难道再让您的模板引擎也升级成为编译性的,好让您往您的模板中加入php语句? 您错了。其实,我们看一看,我们的模板引擎充当了什么样的角色呢?我们把一段特定的按一定规则编写的html代码进行一定的数据处理后输出成了另外 一段,输出过程中某些字符发生了改变。那我们的伟大的php干了什么呢?它帮我们把我们按规则写好的php代码也按一定规则输出成了一段html。两者本 质是一样的。只是,php本身比我们那些蹩脚的模板引擎更快,更漂亮。
再说细一点,现在用的最多的Smarty.看一看它的结构: <{if $article.rates}>
<{php}>echo art_constant(“MD_RATE”);<{/php}>: <{$article.rating}>/<{$article.rates}> <{/if}>
你觉得它是一个美工能看清的html文件么? 看看编译后的结果,它看起来应该是这样的:
if($articles.rates){ ?>
:
/
哈。我们伟大的smarty把这html也变成了php了。然后在以后的工作中,这些php代码会直接被运行。
有必要吗?本来是apache承载php,php直接编译php 源代码,现在变成了apache承载php,php编译smarty引擎,smarty引擎又去编译html文件。反而多了一层,smarty自个儿把本来php要做的工作拿了做了。
而且糟糕的是,smarty的模板打开来以后,比php文件更让人难以看清。所以我说,放弃您的模板系统吧。但记住我们开发模板系统的初衷。您会说:那要是放弃模板系统了,我怎么分开程序逻辑和视图层面? 这个也太好办了。您可以这样写: 第一个文件这样写:
file :logic.php
@author renlu xu
$rs=mysql_query(“select id,title,body from articles order by id desc limit 30”);while($row=$mysql_fetch_assoc($rs)){
$rows[]=$row;} ?>
第二个文件作为您的视层面的文件。您可以让您的平面设计师在mac上设计漂亮绝顶的图片,然后切成html文件,交给您的页面整合工程师。这个工程 不需要懂太多php,他基本上只需要会用print就行了。他把这个html文件改名为view.php,然后在里面加上相应代码:
file:view.php
@author renlu xu
foreach($rows as $row){
echo “
ok.这就视层面文件。这个文件用织梦者(dreamweaver)打开后,应该跟美工做出来的图是一样的,就仅仅多了用那个黄色的问号代表的php代码。写得好时,dreamweaver还能列出您的php代码中输出了什么内容,效果更佳。这两个文件,就是一个是逻辑层,一个是视层面。然后用index.php将他们包含起来。
file:index.php
@author renlu xu
include “databaseConnect.php”;//连接数据库的代码,我就不写了
include “logic.php”;include “view.php”;include “cache.php”;?>
这样逻辑和视,就分开了。那有人会说,如果我用模板,可以将要输出的内容写入到静态文件中,现在没了模板我该怎么办?
这个不是问题。我们用的是php,超酷的php.看看,我们加了cache.php.这就是用来实现您说的缓存效果的。我们的cache文件:
file:cache.php
@author renlu xu
$content=ob_get_content();$fp=fopen(“index.html”,“w”);fwrite($fp,$content);fclose($fp);?>
当然,index.php也改成:
file:index.php
@author renlu xu
if(file_exists(“index.html”)){
include “index.html”;exit();}
include “databaseConnect.php”;//连接数据库的代码,我就不写了
include “logic.php”;include “view.php”;incldue “cache.php”;
?>
这样您看这缓存效果是不是就出来了? 有人说:我用模板还有一个好处啊,就是模板写错了还不会影响到程序的运行。是的。咳,怎么说呢?您在模板中将<{=$site_name}& amp;gt;写成了<{=$sie_name}>是没啥,您的php程序还是很”健壮”地运行着。不过您没觉得,当您期望的那一个将由& lt;{=$site_name}>来打出来的网站名称没有出现的时候,您排起错来会很难找吗?对于一个程序师来说,您不觉得,光只视层面的那些 echo语句,只应该是您工作中极微不足道的一部分吗?在这个主要是echo语句构成的视层面文件view.php,您还出现编译期错误,是不是该拉出去 打屁屁?
另外,在php程序正式上线运行时,您也可以将它的报错功能关闭啊。
PHP 模板高级篇总结
怎么使用PHP来快速地编写代码,模版似乎成了唯一的选择。不过一个PHPer最终应该坚持使用模版,放弃模版,还是使用自己的模版?
以下想法是属于所有PHPer的想法:
“模板这东西,其实最重要的是适合自己的项目需求,而不是适合自己的习惯.比如一个企业的宣传网站,访问量不大,更新量也不大,用什么都相同,甚至不用,直接PHP+HTML写可能速度最快.也没什么不可.不过如果是个新闻系统,或是内容发布系统.两者这样,就非常有必要用到模板这一技术.因为他们都有一个共通的地方,就是有一类页面要用到同一个样式的页面设计.而根据实际情况,比如访问量的大小,项目的紧急程度及程式员对于模板技术的熟练程度,选择最适合项目的模板技术..这才是最佳选择。”[来自leslee]
“从开始学习php就开始接触模板,我用的是smarty模板引擎(官方支持,功能强大),使用时间越长越发觉得模板是个好东西。只要要涉及到页面显示的东西,我的都会用模板去写,如果不用模板写程式总觉得别扭。我想其他的phper也会有相同的感觉,因为模板设计的初衷是将代码和页面分离出来分别处理,毕竟谁也不愿意一边写代码,一边处理页面。”
“有人说SMARTY已非常好了,但也有人说SUPERTPL更好,也有人更中意于PHPLIB我认为每个模板都有自己好处,也有自己的不组,关键看你的项目需要什么,用什么最佳!”[来自feifengxlq]“用模板肯定是没有错的最初使用的是PHPLIB,使用过了一段时间后,感觉太简单了,每个模板变量都要写代码去替换,每引用一个模板也得写一行代码(也许PHPLIB有批量处理功能,我太菜不知道)因而放弃了,后来用plog建站的时候接触到了smarty,感觉smarty过于庞大,确实能加快研发进度,不过非常多功能实际都用不上,因此,最后还是自己写了模板引擎,要模板实现的功能非常简单,就是个模板变量的替换功能,再加上include其他模板和foreach块操作功能。”
“我还是用PHPLIB,不过,我会按自已的经验和需要,写一些函数或类来封装最常用的一些针对模板输出的处理。”[来自seraph]“我使用自己的模板,还要写模板解析代码,累呀。我选择使用现有优秀的模板。”[来自Bantu]“偶在别的论坛上看见一些非常厉害的人不用模板...可能是没到那种境界...个人感觉还是使用模板的好..至少能分工..加快研发速度。使用自己的模板? 感觉没有必要哈...用现成的就行了..在现成的基础上加上一些自己学要的实际功能。”[来自Phzzy]“我不使用模板引擎,但我也是使用模板,只是跟你们的不相同。因为模板引擎太慢了感觉不好用。”
“我用第三方的,最佳是开源的。至于用哪个,看个人的爱好吧。”[来自leeyupeng]“我还是倾向于使用自己的模板简单实用。”[来自夕日]“由于考虑到性能,我一般不使用通用的模板,会根据实际情况做一些取舍,具有一定的局限性。”[来自Ben]“根据需要来决定使不使用模板,及使用什么模板。灵活一点总是没有坏处的。”[来自xlmo]“个人喜欢简单快速的模板,能考虑用现成的模板,不过一般会根据实际项目优化一下,把里面用不到的一些功能删除等。”
“使用模板一般倒不会导致瓶颈,至于会影响点效率主要这么几点:
1、程式和模板分离后,一个文件就变成两个或多个了,那读取模板这个IO也是要点时间的
2、解析模板相对是比较复杂的,一般都需要N个 preg_match,preg_replace之类函数来处理或替换
3、模板的载入和替换工作明显需要比不使用模板占用更多的内存
所以提高效率注意以下几点:
1、模板解析程式选用支持编译和缓存的,这个对性能好处是最明显,看自己怎么灵活应用了
2、解析程式尽量简单,什么功能都放进去那用起来是方便了,性能也差了
3、做html的模板页面时候也是遵从简单的原则,比如按xhtml标准做,尽量不要把一个页面拆成非常多个模板然后再include。”
“如果使用模版的话,我觉得有能力还是自己写一个好。这也是锻炼。不过要用我觉得小强非常好。能在可视化下编辑。”[来自jejwe]“我个人也认为模板文件的可视化编辑性非常重要。不能需求模板页面的制作也要有相当程式研发基础的。”[来自seraph]“具体问题具体分析,模板使用和否,选择已成型的优秀模板类还是自己去写,一切都是根据具体的项目研发而言的,不能死求哪一个的。”[来自Deepseath]“感觉现有的那些模版不够完善,要么功能少,要么速度慢,还是自己做的好。”
“总结,PHP模板能让你的代码脉络更加清晰,结构更加合理化。不过,PHP模板的发展总是会比PHP应用的迅速发展缓慢许多,在这种情况下,反而会影响到PHP应用的研发。对于每一个PHPer来说,没有一个PHP模板对他是最合适、最完美的。因为所谓的PHP模板就是大众化的东西,并不是针对个人的。所以,如果能在对PHP特点、应用有清晰的认识的基础上充分认识到模板的优劣势和该PHP应用原理,PHPer就能得到自己需要的适合自己研发风格的PHP模板。这也是PHP最重要的思想之一,PHP提供的只是方法、途径,而不是最终解决方案。所以模板和PHP应用、产品相同都能改造为自己的PHP模板。因为这里面寄托着创造者的思想。
限于各种不同的条件限制,比如时间、经验,所以大家可能认为做一个自己的PHP模板是非常困难。其实,你需要的不是重新构造一个PHP模板,而是选择一个最贴近自己的PHP模板加以改造。因为PHP需要继承、创新。当然,做一个自己的PHP模板一步一步地实现,并及时融入最新的思想和理念。个人PHPer能从细节做起,从自己最需要的地方、自己的研发习惯做起。PHPer团队能分工协作进行PHP模板本地化,尤其对于公司而言尤为实用。就算你只是修改了PHP模板里面的一个符号,仅仅是个符号也能说明你对他加以了改造,他就是属于你的。最重要的是,属于自己的PHP模板永远不是固定不变的,他将伴随你一直成长,也会成为你的PHP历程的见证。
PHP不必非常精通的语法;PHP不必你自己去研发众多的库;PHP不必你去为性能、稳定性等语言自身的特性而担心。PHP需要的是你的逻辑;PHP需要的是你的创造力;PHP需要的是你的思想!”
第二篇:PHP高级程序员笔试试题-2011(范文模版)
PHP高级程序员笔试试题
1、Include require include_once require_once 的区别?
2、.向php传入参数的两种方法。(mysql)请写出数据类型(int char varchar datetime text)的意思;请问varchar和char有什么区别?
3、您是否用过版本控制软件? 如果有您用的版本控制软件的名字是?
4、写代码来解决多进程/线程同时读写一个文件的问题。
5、Mysql 的存储引擎,myisam和innodb的区别?
6、MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?写出一种排序算法(原理),并说出优化它的方法?
7、对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题?
8、请介绍Session的原理,大型网站中Session方面应注意什么?
9、介绍一下常见的SSO(单点登陆)方案(比如dedecms整合discuz的passport)的原理?10、11、12、13、14、15、16、17、18、19、20、您写过的PHP框架的特点,主要解决什么问题,与其他框架的不同点? 写一段上传文件的代码?
测试php性能和mysql数据库性能的工具,和找出瓶颈的方法? ssh 安全增强方法;密码方式和rsa key 方式的配置; linux下查看当前系统负载信息的一些方法? gdb,strace,valgrind的基本使用; javascript中的prototype; javascript中this对象的作用域; IE/firefox常用hack;
firefox,IE下的前端js/css调试工具;
一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。用程序模拟该过程。
21、HTTP协议中几个状态码的含义:503 500 401 200 301 302……
22、一些编译php时的configure 参数;23、24、25、26、27、28、Safe_mode 打开后哪些地方受限.;
已知某年元月一日星期几,不使用日期函数,计算某年某月某日星期几; memcache与memcached的区别与安装方法; Memcache和mysql交互流程操作原理; 设计一个无限分类表,并写出核心代码;
第三篇:高级JAVA、PHP程序员岗位职责
1.负责公产品软件设计、开发、测试和维护工作,主要为C++、java、php。
2.负责任务的质量和完整性,包含故障分析、解决、修复,一般文档编制。
3.发现和指出项目或计划中的设计问题。
4.总结产品研发经验,持续改进产品性能。
5.为产品的市场推广提供技术支持。
6.报据用户或公司其他部门的要求进行设计修改和设计改进。
7.研究项目技术细节,编写相应的说明书。
第四篇:php课程总结
一、时间和地点:
每周四上午在F311上课。
二、课程内容:
通过这段时间的学习,我对PHP中的MySQL数据库有了一定的理解。由于以前没有基础,在老师讲课的过程开始有点费尽,尽量记了一些。首先学习了一些定义:MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
数据(Data)是对客观事物的符号表示,如图形符号、数字、字母等,数据是数据库中存储的基本对象。在日常生活中,人们直接用语言来描述事物;在计算机中,为了存储和处理这些事物,就要将事物的特征抽象出来组成一个记录来描述。之后,进行数据的编写,知道了数据库的发展史:人工管理阶段(人力手工整理存储数据)、文件系统阶段(使用磁盘文件来存储数据)、数据库系统阶段、关系型数据库、高级数据库阶段、“关系-对象”型数据库。再然后学习了数据库的类型:
(1)纯文本数据库: 纯文本数据库是只用空格符、制表符和换行符来分割信息的文本文件。适用于小型应用,对于大中型应用来说它存在诸多限制:
只能顺序访问,不能进行随机访问。 查找数据和数据关系或多用户同时访问进行写操作时非常困难。
(2)关系数据库:
由于纯文本数据库存在诸多局限,所以人们开始研究数据模型,设计各种类型的使用方便的数据库。在数据库的发展史上,最具影响的数据库模型有:层次模型、网状模型和关系模型。其中,关系模型是目前应用最广泛和最有发展前途的一种数据模型,其数据结构简单,当前主流的数据库系统几乎都采用关系模型。数据库管理系统:数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,是用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。
MySQl特征:性能快捷、优化SQL语言、容易使用、多用户支持、可移植性和开放源代码、遵循国际标准和国际化支持、为多种编程语言提供API。
mysql命令:mysql命令
mysql-h host_name-u user_name –ppassword h:当连接MySQL服务器不在同台主机时,填写主机名或IP地址 u:登录MySQL的用户名 p:登录MySQL的密码
注意:密码如果写在命令行的时候一定不能有空格。如果使用的系统为linux并且登陆用户名字与MySQL的用户名相同即可不用输入用户名密码,linux默认是以root登陆,windows默认用户是ODBC mysql程序常用命令:选定默认数据库:use dbname;显示所有数据库:show databases;显示默认数据库中所有表:show tables;放弃正在输入的命令:c;显示命令清单:h;退出mysql程序:q;查看MySQL服务器状态信息:s 接着我们讲了数据库基础知识,在此课中我们了解了数据库: 数据库由一批数据构成的有序集合,这些数据被分门别类地存放在一些结构化的数
据表(table)里,而数据表之间又往往存在交叉引用的关系,这种关系使数据库又被称为关系型数据库 档案柜=数据库 抽屉=表 文件=记录
一、数据库的组成以及功能
1、SQL语法组成:DML(Data Manipulation Language数据操作语言)
——查询、插入、删除和修改数据库中的数据; ——SELECT、INSERT、UPDATE、DELETE等;
DCL(Data Control Language数据控制语言)
——用来控制存取许可、存取权限等; ——GRANT、REVOKE 等;
DDL(Data Definition Language数据定义语言)——用来建立数据库、数据库对象和定义其列
——CREATE TABLE、DROP TABLE、ALTER TABLE 等 功能函数
——日期函数、数学函数、字符函数、系统函数等
2、MysQl数据库增删改查:
数据库的操作:增、删、改、查
增 create database name、删 drop database name、查 show databases 改 没有修改数据库的语句、可以修改数据库的名字
Myisan 直接进入mysql data文件夹进行修改、Innodb 不可以改名,只能重建 几个重要的数据库:
Informatio_schema 存储数据库的各种信息用户信息,列表信息,字符集信息等等„.Mysql用户权限信息
Test 仅供用户使用的测试数据库,可以随意使用 Cluster 服务器数据集,不可以删除
Phpmyadmin mysql图形管理软件的一种web
3、数据表的操作
Use 数据库名; 增 create table 表名(字段名 字段类型[约束条件],字段名 字段类型[约束条件]。。)
删 drop table 表名 改
查 show tables
4、数据类型种类:
数值型
分为整型和浮点型
整型:可以由十进制和十六进制表示
整数由数字序列组成,如:1,100。
由十六进制表示方法:0x且后面加1—9和A—F 的任意数字或字母,并且0x中的X不能大写。
浮点型:
浮点数由一个数字加一个小数点再加上一个数字组成。两个数字序列不能同时为空。
数值列的完整性约束
(1)AUTO_INCREMENT 自动标识列,在需要产生唯一标志符号或者顺序值时候,可用此属性。值一般从1开始,每行增加1,在插入NULL到一个AUTO_INCREMENT列时,MySQL会插入一个比该列中当前最大值大1 的值,一个表中最多能有一个有此属性的列。对于想使用此属性的列应该定义为NOT NULL,并定义为PRIMARY KEY 或者定义为UNIQUE键。
举例:
create table t(id int auto_increment not null primary key);(2)UNSIGNED 无符号,此属性禁用负值,将数值的取值范围从零开始。举例:
create table t(num tinyint , num2 tinyint unsigned);(3)NULL和NOT NULL 默认为NULL,即插入值时没有在此字段插入值时自动填NULL,如果指定了NOT NULL,则必须在插入值时在此字段添入值,不允许插入NULL值。(4)DEFAULT 可以通过此属性来指定一个缺省值,即如果没有在此列添加值,那么默认添加DEFAULT后指定值。(5)ZEROFILL 前导零填充数值类型值以达到列的显示宽度。
举例:
create table test2(num1 int default 1,num2 int zerofill);CHAR和VARCHAR类型:
CHAR类型和VARCHAR类型长度范围都是0~255之间的大小。他们之间的差别在于MySQL处理存储的方式:
CHAR把这个大小视为值的准确大小(用空格填补比较短的值)。
VARCHAR类型把它视为最大值并且只使用了存储字符串实际上需要的字节数(增加了一个额外的字节记录长度)。因而,较短的值当被插入一个语句为VARCHAR类型的字段时,将不会用空格填补(然而,较长的值仍然被截短)。
5、创建数据库:
建立数据库操作:
语法:create database 数据库名
叙述:创建一个具有指定名称的数据库。如果要创建的数据库已经存在,或者没有创建它的适当权限,则此语句失败。例:建立一个student库。
mysql> create database student;创建表:建立表操作:
语法:create table 表名( 列名1 列类型 [<列的完整性约束>], 列名2 列类型 [<列的完整性约束>], ......);叙 述:在当前数据库下新创建一个数据表。
列类型:表示该列的数据类型。例:
建立一个表school,其由两列组成,第一列属性为非空,并做为主键,并自增
create table school( school_id int(10)not null auto_increment primary key, school_name varchar(20)
);
6、主键与外键:数据表之间的关联/引用关系是依靠具体的主键(primary key)和外键(foreign key)建立起来的。
(1)主键:帮助MySQL以最快的速度把一条特点的数据记录的位置确定下来。
主键必须是唯一的
主键应该是紧凑的,因此整数类型比较适合
主键
create table student(sid int not null auto_increment, name varchar(20)not null, primary key(sid));(2)外键:引用另外一个数据表的某条记录。
外键列类型尽可能与主键列类型保持一致 外键列应该加上NOT NULL 外键(自动检查外键是否匹配,仅适用InnoDB)
create table score(cid int not null auto_increment primary key, score int, sid int, foreign key(sid)references student(sid));
7、删除数据库或表操作
删除表操作
语法:drop table [if exists] tab_name [,tab_name]...叙述:从数据库中删除给定的表。如果给出if exists 子句,则删除不存在的表不会出错。
删除数据库操作
语法:drop database [if exists] db_name 叙述:删除给定的数据库。在删除一个数据库后,它就永远没有了,因此要特别小心。如果给出if exists 子句,则删除不存在的数据库不会出错。
更改表结构操作:
语法:alter table 表名 action; 说明:action 可以是如下语句:
add 列名 建表语句 [first | after 列名] 可以为表添加一列,如果没指定first或者after,则在列尾添加一列,否则在指定列添加新列
add primary key(列名)为表添加一个主键,如果主键已经存在,则出现错误
add foreign key(列名)references 表名(列名)为表添加一个外键
alter 列名 set default 默认值
可以更改指定列默认值
举例1:
向people表中添加字段address2,类型为varchar,最大长度为100 alter table people add address2 varchar(100);
8、插入记录操作
叙述:
如果表名后面没写字段名,则默认是向所有的字段添加值,另外字符串值应该用‘ ’或“ ”引号括起来
举例1:向people表中添加一条记录:
insert into people(name,age)
values(“zhangsan”,20);多表查询—分类
连接查询
同时涉及多个表的查询称为连接查询 用来连接两个表的条件称为连接条件
内连接(INNER JOIN) 外连接
——左外联结(LEFT JOIN)——右外联结(RIGHT JOIN)
二、算数运算符
(1)用字符串表示的数字在任何可能便于计算的地方都被自动地转换为数字。当执行转换时,MySQL遵循两个基本规则:
如果第一位是数字的字符串被用于一个算数运算中,那么它被转换为这个数字的值。 如果一个包含字符和数字混合的字符串不能被正确的转换为数字,那么它被转换成0。
(2)比较运算符
比较运算符允许我们对表达式的左边和右边进行比较。一个比较运算符的结果总是1(真),0(假),或是为NULL(不能确定)。 比较运算符可以用于比较数字和字符串。数字作为浮点值比较,而字符串以不区分大小写的方式进行比较(除非使用特殊的BINARY二进制关键字)
在第二章中我们学习到了数据库的连接。
1、mysql 连接:
七剑下天山
// 第一贱:连接数据库
• mysql_connect — 打开一个到 MySQL 服务器的连接
• mysql_pconnect — 打开一个到 MySQL 服务器的持久连接
• //resource mysql_connect([ string $server [, string $username [, string
$password [, bool $new_link [, int $client_flags ]]]]])(在php手册中有 • //mysql 连接:
• // mysql_connect 非持久连接,效率较低,对资源消耗小 • // mysql_pconnect 持久连接,效率高,消耗大量的资源 • $link=mysql_connect('localhost:3306','root','root');• var_dump($link);// 第二贱:判断连接是否成功
• //第二贱:判断连接是否成功//mysql_errno — 返回上一个 MySQL 操作中的错误信息的数字编码
• //mysql_error — 返回上一个 MySQL 操作产生的文本错误信息
• //echo mysql_errno();正确返回0,错误返回一个正整数,输出最近一次的mysql错误。
// 第三贱:设置字符集
• bool mysql_set_charset(string $charset [, resource $link_identifier ])• //mysql_set_charset — Sets the client character set • //bool mysql_set_charset(string $charset [, resource $link_identifier ])• mysql_set_charset('utf8');// 第四贱:选择数据库
• //mysql_select_db — 选择 MySQL 数据库 • mysql_select_db('company11');• mysql_select_db — 选择 MySQL 数据库 • 说明
• bool mysql_select_db(string $database_name [, resource $ link_identifier ])• 成功时返回 TRUE,或者在失败时返回 FALSE.• mysql_select_db()设定与指定的连接标识符所关联的服务器上的当前激活数据库。如果没有指定连接标识符,则使用上一个打开的连接。如果没有打开的连接,本函数将无参数调用 mysql_connect()来尝试打开一个并使用之。
// 第五贱:准备并且发送sql语句
• //$sql='select * from biao';• //mysql_query($sql)//mysql_query — 发送一条 MySQL 查询
//resource mysql_query(string $query [, resource $link_identifier ])// 第六贱: 判断执行结果,或者遍历结果集
• //增删改的判断
• $result=mysql_query($sql);(放入第五贱)• if($result && mysql_affected_rows()){ •
echo '执行成功';• }else{ •
echo '执行失败,或者不存在数据';• } • $sql=“insert into zhiyuan(name,sex,bumen)values('zhou',0,2)”;• $sql=“update zhiyuan set bumen=3 where name='小王'”;• $sql=“insert into zhiyuan(name,sex,bumen)values('小王',0,2)”;// 第七贱:万贱归宗 */
之后,学习了面向对象。
1、面对对象技术的基本观点如下:
(1)客观世界由对象组成。
(2)具有相同数据(属性)和操作(方法)的对象可归纳成类。
(3)类可以派生出子类,子类除了继承父类的全部特性外还可以有自己的特性(4)对象之间的联系通过消息传递(可理解为方法调用)来维系。
假设m1是类Manager的一个实例(或对象),当外界要求把这个对象所 代表的那位经理的级别改变为2时,就应以下面的方式向这个对象发出一条消息: ml.ChangeLevel(2)消息传递
PHP的WEB技术面向对象是仿造现实对象建立的,他们也有状态和行为。软件对象在一个 或多个变量中维护它的状态。变量是一个由标识符命名的数据项。对象用方法实现它的行为。方法是与一个对象相关联的函数(子过程)。
• 对象有二个性质:状态(state)和行为(behavior)。• 对象是一个封装数据属性和操作行为的实体.2、面向对象
将相关的变量和方法封装进一个简洁的软件组合是一种简单而强大的思想,它给软件开发人员提供了两个主要的好处:
模块化:一个对象的源代码可以独立于其他对象的源代码进行编写和维护。另外,对象很容易地在系统中传递。你可以将你的自行车对象交给其他人,而它仍然会正常工作。(重构、代码复用)
隐藏信息:对象有一个公共接口,其他对象可以使用这个接口与它通信。对象可以维护私有的信息和方法,可以在任何时候改变这些信息和方法,而不影响依赖于它的其他对象。你不需要理解你自行车使用的变速齿轮机制就能够使用它。即是:封装
3、类
类是一组具有相同数据结构和相同操作对象的集合。
在现实世界中,常常有相同类型的许多对象。例如,你的自行车只是世界上的许多自行车之一。用面向对象的术语来说,你的自行车对象是自行车类的一个实例。自行车有一些共有的状态(当前的变速齿轮、当前的步调、两个轮子)和行为(改变变速齿轮、刹车)。但是,每辆自行车状态独立于其他自行车状态,也就说每辆自行车的状态可以互不相同。
• function jia($no1,$no2){ •
return $no1+$no2;• } • function jian($no1,$no2){ •
return $no1-$no2;• } • function cheng($no1,$no2){ •
return $no1*$no2;• } • function chu($no1,$no2){ •
return $no1/$no2;• } • function max(){
• echo '我是最大值';• }
4、类的成员-字段(1)、声明字段 name;?>(2)使用字段
• 与变量不同,使用字段要使用->操作符,而不是美元符号
– $employee=new Staff();– echo $employee->name;• 当在定义字段的类中引用字段时要使用$this关键字。$this表示当前类
5、、构造函数
构造函数是类中的一个特殊函数,当使用 new 操作符创建一个类的实例时,构造函数将会自动调用。
Php5中以__construct()作为构造函数。而php4中是以将和类名相同的函数作为构造函数。为了兼容php5先寻找__construct(),如果找不到再寻找以类名命名的构造函数
如果一个类没有构造函数,则调用基类的构造函数 Class Staff { function __construct()//两个下划线 { echo “调用了构造函数”;} function Staff(){ echo “调用了构造函数2”;} } $employee=new Staff();• //构造方法 函数
• //特点,就是在new 的时候也就是调用这个壳的时候就进行了调用的方法
• //写法:php4中只认识一种 类名和函数名相同的话,那个函数就是使构造方法 • //php5中 类名和函数名相同/__construct()都是构造方法
• //注意:构造方法在类中只能有一个 不要写多个 使用PHP4的或者PHP5的两个相同构造方法会报重载错误
• //但是如果一个PHP4的一个PHP5的构造方法就不会报错,但是逻辑有问题
• //构造方法的参数传值,是在调用类的时候()放的就是为构造方法准备的参数 //析构方法 函数 __destruct()• //特点,析构方法是在调用完之后,自动执行 在接收类调用的变量改值的时候/或者页面结束 自动启动
• //声明关键字 [private protected public var ]
6、析构函数
(1)析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。脚本执行结束时,php会撤销内存中的所有对象,因此如果实例化时创建的信息都会保留到内存中,就不需要显式的声明析构函数。但是如果创建了不那么容易丢失的数据时(例如连接数据库)就应当定制析构函数进行销毁数据。Class Staff { function __construct(){ echo “调用了构造函数”;} function __destruct(){ echo “调用了析构函数,需要释放和销毁的“;} } $employee=new Staff();(2)类的成员-属性_set()__set()//两个下划线
$this->$propname=$propvalue;
print ”ok
“;} } $model=new Test();$model->age=25;$model->title=”English“;echo ”
“;print ”age: “.$model->age.”
“;echo ”
“;print ”title: “.$model->title.”
“;?> 可用来验证某个属性是否存在或增加新的属性
7、控制对类的成员访问
(1)public :在任何位置都可以读取和修改这个成员变量或者调用这个方法。这个修饰符在外部代码使用,由给定类中的代码使用,或者在扩展给定类的功能的类中使用。
(2)private : 只有这个类中的代码才能读取和修改私有变量或者调用私有成员函数。其他代码、类或者扩展这个类的功能类(子类)不能使用私有条目。
(3)protected : 外部代码与给定类不相关的其他类不能读取或者修改使用了关键字protected的成员变量,也不能调用受保护的成员函数。(4)abstract 定义抽象类
(5)final 子类方法不允许覆盖父类方法 先了解,下一章重点阐述
8、静态类成员
当需要一些所有类对象共享的字段和方法时就需要创建一些静态的字段和方法。Class Staff { public static $name=”静态字段“;static function show(){
echo self::$name,”
“;} } echo Staff::$name,”
“;Staff::show();
9、常量
常量(const)即不会在类中改变的值,对于该类的任何实例化的对象来说 常量值在这些对象的整个生命周期中都保持不变 Class Staff { const CITY=“北京”;} echo Staff::CITY;
之后,学习了PHP正则表达式
1、正则表达式简介
正则表达式是用于描述字符排列模式一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。到目前为止,我们前面所用过的精确(文本)匹配也是一种正则表达式。
在PHP中,正则表达式一般是由正规字符和一些特殊字符(类似于通配符)联合构成的一个文本模式的程序性描述。
在程序语言中,通常将模式表达式(即正则表达式)包含在两个反斜线“/”之间,如“/apple/”。用户只要把需要匹配的模式内容放入定界之间即可。
如果使用一个没有特殊字符的正则表达式,相当于纯文本搜索,使用strstr()函数也可达到同样的效果。
2、^ 和 $ ”^The“: 开头一定要有”The“字符串;”of despair$“: 结尾一定要有”of despair“ 的字符串;那么, ”^abc$“: 就是要求以abc开头和以abc结尾的字符串,实际上是只有abc匹配
”notice“: 匹配包含notice的字符串 你可以看见如果你没有用我们提到的两个字符(最后一个例子),就是说 模式(正则表达式)可以出现在被检验字符串的任何地方,你没有把他锁定到两边(开始或结束)
3、'*', '+',和 '?', * 表示出现0次或1次或多次 相当于{0,}, + 表示出现1次或多次 相当于{1,}, ? 表示出现0次或1次 相当于{0,1}, 这里是一些例子: ”ab*“: 和ab{0,}同义,匹配以a开头,后面可以接0个或者N个b组成的字符串(”a“, ”ab“, ”abbb“, 等);”ab+“: 和ab{1,}同义,同上条一样,但最少要有一个b存在(”ab“, ”abbb“, 等.);”ab?“:和ab{0,1}同义,可以没有或者只有一个b;”a?b+$“: 匹配以一个或者0个a再加上一个以上的b结尾的字符串.要点, '*', '+',和 '?'只管它前面那个字符.4、[ ] 中括号括住的内容只匹配一个单一的字符
”[ab]“: 匹配单个的 a 或者 b(和 ”a|b“ 一样);”[a-d]“: 匹配'a' 到'd'的单个字符(和”a|b|c|d“ 还有 ”[abcd]“效果一样);一般我们都用[a-zA-Z]来指定字符为一个大小写英文 ”^[a-zA-Z]“: 匹配以大小写字母开头的字符串 ”[0-9]%“: 匹配含有 形如 x% 的字符串
”,[a-zA-Z0-9]$“: 匹配以逗号再加一个数字或字母结尾的字符串
5、正则表达式的语法规则
正则表达式是主要由: 原子(普通字符,如英文字符) 元字符(有特殊功用的字符) 以及模式修正字符组成。
一个正则表达式中至少包含一个原子。
6、PHP中的正则表达式函数
在PHP中有两套正则表达式函数库。
一套是由PCRE(Perl Compatible Regular Expression)库提供的。PCRE库使用和perl相同的语法规则实现了正则表达式的模式匹配,其使用以“preg_”为前缀命名的函数。
另一套是由POSIX(Portable Operation System interface)扩展库提供的。POSIX扩展的正则表达式由POSIX 1003.2定义,一般使用以“ereg_”为前缀命名的函数。
两套函数库的功能相似,执行效率稍有不同。一般而言,实现相同的功能,使用PCRE库的效率略占优势。
7、、正则表达式的拆分
1split()和spliti()函数原型:
array split(string $pattern,string $string[,int $limit])本函数返回一个字符串数组,每个单元为$string经正则表达式$pattern作为边界分割出的子串。如果设定了$limit,则返回的数组最多包含$limit个单元。而其中最后一个单元包含了$string中剩余的所有部分。Spliti是split的忽略大小版本。
之后,学习了文件系统处理。
open()打开文件或者URL $file=fopen('1.txt','r');//只读模式打开 //r 只能读取不能写入
//r+ 增强的读写模式 表示以只读模式打开,但是仍然可以进行部分的写入操作 //w 写模式 打开文件的时候,原有内容会被清空 如果文件不存在就新建一个文件,再打开
//w+ 增强的读写模式
//a 追加模式(写)不会清空原有文件而是在源文件的基础上进行累加 不存在也可以新建
//a+ 增强的追加模式(读写)/x异或模式 文件存在就报错,不存在就创建 //x+增强的异或模式 //b 打开二进制文件
1、文件的打开
2、文件的删除
//rename('1.txt','1.exe');/ /删除
rmdir('C')//删除空目录 ?>
3、什么是文件系统
就是对系统或者服务器中的文件进行操作,增删改查,文件的上传和下载
4、文件系统能做什么?
a)文件缓存的应用 b)配置文件的应用
c)FTP站点主要是FTP下载站 d)站点页面的静态化 e)文件的上传和下载。
5、文件下载:查找 header
header('content-type:image/gif');//告诉浏览器你的文件描述
header('Content-Disposition: attachment;filename=”baidu.gif"');//告诉浏览器文件的大小
header('content-length'.filesize('baidu.gif'));//显示内容
readfile('baidu.gif');?>
三、个人收获
学习PHP的过程做一下概括:
(1)熟悉HTML/CSS/JS等网页基本元素,完成阶段可自行制作完整的网页,对元素属性达到熟悉程度
(2)理解动态语言的概念,运做机制,熟悉PHP语法
(3)学习如何将PHP与HTML结合起来完成简单动态页面
(4)接触MYSQL,开始设计数据库程序
(5)不断巩固,摸透大部分PHP常用函数,并可理解OOP,MYSQL优化,以及模板
(6)完成一个功能齐全的动态站点
通过这段时间的学习,自己受益匪浅,知道了很多关于PHP的东西,学会了很多内容。在这堂课的学习过程中我认真听讲,上机认真练习,遇到难题,自己思考与探索,不断地寻求进步,请教老师和同学,虽然上半年没有学习这门课程,不过老师讲课非常仔细,然后同学们一步步自己跟着老师做,还是能跟得上,等着以后自己做毕业设计也有一定的帮助。
第五篇:PHP基础总结
1、在HTML嵌入PHP脚本有三种办法:
<scriptlanguage=“php”>
//嵌入方式一
echo(“test”);
</script>
<?
//嵌入方式二
echo“<br>test2”;
?>
<?php
//嵌入方式三
echo“<br>test3”;
?>
还有一种嵌入方式,即使用和Asp相同的标记<%%>,但要修改PHP.ini 相关配置,不推荐使用。
2、PHP注释分单行和多行注释,和java注释方式相同。
<?
//这里是单行注释
echo“test”;
/*
这里是多行注释!可以写很多行注释内容
*/
?>
注意不要有嵌套注释,如/*aaaa/*asdfa*/asdfasdfas*/,这样的注释会出现问题。
3、PHP主要的数据类型有5种,integer,double,string,array,object。
4、函数内调用函数外部变量,需要先用global进行声明,否则无法访问,这是PHP与其他程序语言的一个区别。事例代码:
<?
$a=1;
functiontest(){
echo$a;
}
test();//这里将不能输出结果“1”。
functiontest2(){
global$a;
echo$a;
}
test2();//这样可以输出结果“1”。
?>
注意:PHP可以在函数内部声明静态变量。用途同C语言中。
5、变量的变量,变量的函数
<?
//变量的变量
$a=“hello”;
$$a=“world”;
echo“$a$hello”;//将输出“helloworld”
echo“$a${$a}”;//同样将输出“helloworld”
?>
<?
//变量的函数
functionfunc_1(){
print(“test”);
}
functionfun($callback){
$callback();
}
fun(“func_1”);//这样将输出“test”
?>
6、PHP同时支持标量数组和关联数组,可以使用list()和array()来创建数组,数组下标从0开始。如:
<?
$a[0]=“abc”;
$a[1]=“def”;
$b[“foo”]=13;
$a[]=“hello”;//$a[2]=“hello”
$a[]=“world”;//$a[3]=“world”
$name[]=“jill”;//$name[0]=“jill”
$name[]=“jack”;//$name[1]=“jack”
?>
7、关联参数传递(&的使用),两种方法。例:
<?
//方法一:
functionfoo(&$bar){
$bar.=“andsomethingextra”;
}
$str=“ThisisaString,”;
foo($str);
echo$str;//output:ThisisaString,andsomethingextra
echo“<br>”;
//方法二:
functionfoo1($bar){
$bar.=“andsomethingextra”;
}
$str=“ThisisaString,”;
foo1($str);
echo$str;//output:ThisisaString,echo“<br>”;
foo1(&$str);
echo$str;//output:ThisisaString,andsomethingextra
?>
8、函数默认值。PHP中函数支持设定默认值,与C++风格相同。
<?
functionmakecoffee($type=“coffee”){
echo“makingacupof$type.n”;
}
echomakecoffee();//“makingacupofcoffee”
echomakecoffee(“espresso”);//“makingacupofespresso”
/*
注意:当使用参数默认值时所有有默认值的参数应该在无默认值的参数的后边定义。否则,程序将不会按照所想的工作。
*/
functiontest($type=“test”,$ff){//错误示例
return$type.$ff;
}
9、PHP的几个特殊符号意义。
$变量
&变量的地址(加在变量前)
@不显示错误信息(加在变量前)
->类的方法或者属性
=>数组的元素值
?:三元运算子
10、include()语句与require()语句
如果要根据条件或循环包含文件,需要使用include()。
require()语句只是被简单的包含一次,任何的条件语句或循环等对其无效。
由于include()是一个特殊的语句结构,因此若语句在一个语句块中,则必须把他包含在一个语句块中。
<?
//下面为错误语句
if($condition)
include($file);
else
include($other);
//下面为正确语句
if($condition){
include($file);
}else
{
include($other);
}
?>