第一篇:PHP最优秀的年终总结
# 兄弟们, 第一步写什么?
# 这年头上帝都靠不住, 安全重要
error_reporting(0);
# 年终报告规定用语, 这一定得用呀, 不然, 你死都不知道怎么死.echo '亲爱的领导!';
# 要获得领导重视的年终奖,一定要用php语言来写, 不然公司招你进来做什么
define('USERNAME','李刚二世');
#要第一眼引起观注, 你懂的, 写个标题.$title = '年终总结是根据年终奖多少比例形成的三个代表意识文献';
# 接着, 你一定要做以下这件事, 不然, 你的确够蛋疼
$into = $end_of_the_year_award-($you_into +$end_of_the_year_award * 0.2);
# phper怎么也得展示一下你的技术所在.echo $b = is_numeric($a)=== true?intval(rand(999,max($a,999)))> 'bbbbbbbbb'?2:'B':max($a + 0,22222222)* $a + 0< 2?'BBBBBBBBBB':***;
# 接着, 写正式年终报告
if($into >= 100000)
echo '在领导们辛勤引领下,我工作得非常happy';
if($into <= 50000)
echo '不好意思,公司美工经常拖放任务进程.';
if($into <= 5000)
echo '公司的整个项目都立场不对, 像一垃圾项目,我强烈建议推倒重新架构';
if($into <= 1000)
echo '浮云';// 为什么只写两个字呢?因为工资份量, 一字值500, 年终奖才1000.if($into == '明年会补偿给你')
alert('后果相当严重');//后果就是把php气得写js了.# 年终总结也被称为感想, 所此, 你可以写一写, 领导一般不会怪你.echo '公司单身美女太少';
# 优秀的程序员总是在空闲的时刻记录日志
error_log('心情有如刚进公司时的五味杂陈');
# 能够完整写个年终报告是件技术活, 中途总会被客服调戏一下.echo 'Anna: 哥, 请帮我把这个订单5645165456修改产品名lady gaga V2';
# 特别是这几天, 异常傻痛.echo '人民的好英雄, 人民的好党员金大哥离开了, 作为phper, 难道不应该伤痛一下?';
# 给领导讲点曲线指数之类的, 会表现得比较专业.echo '公司销售比上年增长了12%, 比5年前增长了120%, 比50年前增长了12000%';
# 讲讲自己的工作职责.注意别讲太细腻.echo '为公司成功上市作出努力贡献';//贡献这两字一定要加.# 你总得提点工资要求吧?
echo '为了公司成功上市, 我愿意做出工资上的贡献';// 恶心地写上贡献二字.# 作为文艺青年, 你得写一段比较文采性的字.echo '晨光迎着窗户照射在床头, 我睁开双眼, 甜美地微笑了, 为了公司成功上市, 我要起床';
# 也许你还可以写些伟大理想给领导, 这是走向成功之路的重要一步.echo '希望贾内德上船之前能够告诉我们船票是多少钱一张.同时也希望深圳房价不要跌入2万内';
# 快到结束了, 你当然要写些轰动的字眼, 让领导睡间苏醒.echo '领导,我要告诉你, 我已经有了, 你懂的.';
# 作为技术员, 个人觉得这函数一定要调用.end();
# 最后, 难道还要我教你吗?
?>
第二篇: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);
}
?>
第四篇:php学习总结
调试/*………*/ //…….#..........插入时考虑清楚字段类型避免插入后出现缺值,乱码
@ 屏蔽错误or die 条件显示
以前学习php类的总结:
1.php中不能重载,但是能用子类覆盖父类的方法名称来实现新的重载
1.1 在子类中调用父类的覆盖部分可以使用 父类名称::方法名称();
2.final 只能定义类和方法,不能使用final定义成员属性,因为final是常量的意思,在php里定义常量使用的是define函数
2.1 final关键字标记的类不能被继承
2.2 final关键字标记的方法不能被子类重写
3.const是一个定义常量的关键字,在php中定义常量使用的是define()函数,但是在类里定义常量使用的是“const” 这个关键字
3.1在程序中不能修改它的值。
3.2 访问const 修饰的成员属性要使用类名,在本类的方法里使用“self”关键字,但不使用“$”符号,也不能使用对象来访问。
4.static关键字可以描述类中的成员属性和成员方法
4.1 static 的成员属于类,而不属于任何对象,4.2 static的成员是在类第一次被加载的时候分配的空间,其他类无法访问的,只对类的实例共享,能一定程度对类该成员形成保护
4.3 静态成员放到了“初始化静态段”,在类第一次加载的时候放入的,可以让堆内存里的每个对象共享。所以在静态方法里,可以使用这个方法所在的类的“类名”,也可以使用“self”来访问其他静态成员。“self”代表这个静态方法所在的类。
4.3.1 在类里的静态方法是不能访问类的非静态成员的。
4.3.2 在类的非静态方法里可以访问静态成员:”self:成员属性“;
4.4类的静态变量,非常类似全局变量,能够被所有类的实例共享,类的静态方法也是一样,类似于全局函数。
4.5 在类内函数访问静态变量时前面加self::静态函数
4.6 静态变量可以在类外直接访问,访问方法是类名::静态变量
4.7 静态函数可以在类外直接访问,访问方式是类名::静态函数
4.8 在类内静态函数访问另一个静态函数时使用 类名::静态函数名
4.8.1 静态函数在类内访问静态变量时,访问方式是类名::静态变量
4.8.2 静态函数在类内访问静态变量时,访问方式除了是类名::静态变量外,还可以使用self::静态变量
4.9 在类内静态函数访问另一个静态函数时除了使用 类名::静态函数名外,还可以使用self::静态函数名,也可以直接调用静态函数
4.10 静态函数内不能访问非静态变量
4.11 在类内静态函数不能使用$this->非静态函数名访问非静态函数,可以使用self::非静态函数名
4.12
5.类里的”$this“,在php里面提供了一个本对象的引用$this,每个对象里面都有一个对象的引用$this来代表这个对象,完成对象内部成员的调用。
5.1 $this 就是对象内部代表这个对象的引用。
6.类里“self”,self 和$this相似,只不过self是代表这个静态方法所在的类,所以在静态方法里,可以使用这个方法所在的类的”类名“,也可以使用“self”来访问其他的静态成员,通常使用后者”self::成员属性“。
7.类里”__“开头的函数名
7.1类里”__“开头的函数名都是在某一时刻不同情况下自动调用执行的方法。
7.2__toString()方法也是自动被调用,是直接输出对象引用时自动调用的。比如“$p = new Person()”,直接用echo输出$p会产生错误,如果在类里定义了__toString()方法,再用echo直接输出对象引用的时候就不会产生错误了
8.对象串行化
8.1 __sleep()方法,在对象串行化的时候,会调用一个__sleep()方法来完成一些睡前的事情,__sleep()函数不接受任何参数,但返回一个数组,其中包含需要串行化的属性。未被包含的属性降在串行化时被忽略,如果没有__sleep()方法,php将保存所以属性.8.2 __wakeup()方法,在重新醒来时,即由二进制串重新组成一个对象的时候,则会自动调用__wakeup(),做一些对象醒来就要做的动作。
8.3 有时你可能需要一个对象在反串行化后立即执行.为了这样的目的,PHP会自动寻找__sleep和__wakeup方法.9.protected 成员能被同个类中的所有方法和继承出的类的中所有方法访问到,不能被父类的实例直接访问。protected and public 可以动态绑定
10.private 大部分private属性仍然可以被外部代码共享.解决方法是用一对public方法,一个是get(获取属性的值),另一个是set(设置属性的值).10.1private 不可以动态绑定。Private成员只存在于它们所在的类内部.不像public和protected成员那样,PHP模拟静态绑定.10.2 什么时候用到private?private成员只有当你不想让子类继承改变或特殊化父类的行为时才用到,这种情况比你想像的要少,通常来说,一个好的对象分层结构应当允许绝大多数功能被子类特殊化,改进,或改变—这是面向对象编程的基础之一。一定的情况下需要private方法或变量,例如当你确信你不想允许子类改变父类中的某个特定的部份。
11.抽象类:抽象方法是就像子类中一般的方法的占位符(占个地方但不起作用),它与一般方法不同—没有任何代码.如果类中存在一个或更多抽象方法, 那么这个类就成了抽象类.你不能实例化抽象类.你必须继承它们,然后实例化子类.你也可以把抽象类看成是子类的一个模板.如果你覆写所有的抽象方法, 子类就变成一个普通的类.如果没有覆写所有方法, 子类仍是抽象的.如果一个类中中包含有抽象方法(哪怕只有一个), 你必须声明这个类是抽象的, 在class关键字前加上abstract.声明抽象方法的语法与声明一般方法不同.抽象方法的没有像一般方法那样包含在大括号{}中的主体部份,并用分号;来结束.12.接口:如果你建立了一个只有抽象方法的类,你就定义了一个接口(interface).为了说明这种情况, PHP中有interface 和implements关键字.你可以用interface来代替抽象类, 用implements来代替extends来说明你的类定义或使用一个接口.例如, 你可以写一个myClass implements myIterface.这两种方法可以依个人偏爱来选择.12.1 如果接口中出现非抽象方法.会报错
12.2 接口中的方法默认是public 型的.其它类型的修饰符,不能修饰接口中的抽象方法.12.3 即使接口中所有的方法都是抽象方法,也不能使用 abstract 修饰.也不能用final
12.4 即使接口中所有的方法都是抽象方法,在接口中,可以声明静态方法.12.5 在接口中可以有常量,e.g.:
interfaceUser{
const MAX_GRADE = 99;
function getName();
function setName($_name);
}
?>
13.Namespace关键字给一块代码命名.在这个代码块外部,脚本必须用操作符::加上命名空间的名称来引用这个代码块.引用静态的类成员也是用相同的方法.在命名空间内代码不需要声明命名空间, 它本身就是默认的.这种方法比添加前缀的方法好.你的代码可由此变得更加紧凑和可读.你可能想知道是否可以建立分层的(嵌套的)命名空间.答案是不可以.但你可以在命名空间名称后加上冒号, 你可以再次调用在名称中不包含冒号的变量,函数和类.命名空间允许存在冒号,只要不是第一个字符和最后一个字符或接着另一个冒号.命名空间的名称中的冒号对于PHP来说没有任何意义, 但如果你用他们来区分逻辑上的区块, 他们可以很好地说明你的代码中的父子(parent-child)关系.14.__toString()打印对象会调用它的__toString方法.15.不能实例化的类
//
//当__construct()为public时可以实例化
class A{
private function __construct(){}
}
$a = new A();//fail
?>
15.1
//static的方法留给外部访问.
class A{
private function __construct(){}
static function getClassA(){
return “这里是后门,可以通过这里进入类内部..”;
}
}
echo A::getClassA();
?>
15.2
//不能用new实例化的类.
//static的方法留给外部访问.
//在方法内部返回实例.
class A{
private function __construct(){
echo “this is construction
n”;
}
static function getClassA(){
$a = new A();
return $a;
}
}
// 看到这里确实返回的是 A 的实例.但不是同一个对象.$a1 = A::getClassA();
$a2 = A::getClassA();
echo “$a1 的类是 ”.get_class($a1).“ , $a2 是 ”.get_class($a1);if($a1 === $a2){
echo “
$a1 $a2 指向同一对象.”;
}else{
echo “
$a1 $a2 不是一个对象.”;
}
//this is construction
//this is construction
//$a1 的类是 A , $a2 是 A
//$a1 $a2 不是一个对象.?>
15.3
//不能用new实例化的类.
//static的方法留给外部访问.
//在方法内部返回实例.
//定义静态属性保证这个实例能被静态方法调用.
//增加判断部分.
class A{
private static $a = null;
private function __construct(){}
static function getClassA(){
if(null == self::$a){
self::$a = new A();
}
return self::$a;
}
}
// 看到这里确实返回的是 A 的实例.但不是同一个对象.$a1 = A::getClassA();
$a2 = A::getClassA();
echo “$a1 的类是 ”.get_class($a1).“ , $a2 是 ”.get_class($a1);if($a1 === $a2){
echo “
$a1 $a2 指向同一对象.”;
}else{
echo “
$a1 $a2 不是一个对象.”;
}
//$a1 的类是 A , $a2 是 A
//$a1 $a2 指向同一对象.?>
第五篇:总结PHP程序员最常犯的11个MySQL错误
总结PHP程序员最常犯的11个MySQL错误
对于大多数web应用来说,数据库都是一个十分基础性的部分。如果你在使用PHP,那么你很可能也在使用MySQL—LAMP系列中举足轻重的一份子。
对于很多新手们来说,使用PHP可以在短短几个小时之内轻松地写出具有特定功能的代码。但是,构建一个稳定可靠的数据库却需要花上一些时日和相关技能。下面列举了我曾经犯过的最严重的11个MySQL相关的错误(有些同样也反映在其他语言/数据库的使用上)。。
1、使用MyISAM而不是InnoDB
MySQL有很多数据库引擎,但是你最可能碰到的就是MyISAM和InnoDB。
MySQL 默认使用的是MyISAM。但是,很多情况下这都是一个很糟糕的选择,除非你在创建一个非常简单抑或实验性的数据库。外键约束或者事务处理对于数据完整性 是非常重要的,但MyISAM都不支持这些。另外,当有一条记录在插入或者更新时,整个数据表都被锁定了,当使用量增加的时候这会产生非常差的运行效率。
结论很简单:使用InnoDB。
2、使用PHP的mysql函数
PHP自产生之日就提供了MySQL库函数(or near as makes no difference)。很多应用仍然在使用类似mysql_connect、mysql_query、mysql_fetch_assoc等的函数,尽管PHP手册上说:
如果你在使用MySQL v4.1.3或者更新版本,强烈推荐使用您使用mysqli扩展。
mysqli(MySQL的加强版扩展)有以下几个优点:
可选的面向对象接口
prepared表达式,这有利于阻止SQL注入攻击,还能提高性能
支持更多的表达式和事务处理
另外,如果你想支持多种数据库系统,你还可以考虑PDO。
3、没有处理用户输入
这或者可以这样说#1:永远不要相信用户的输入。用服务器端的PHP验证每个字符串,不要寄希望与JavaScript。最简单的SQL注入攻击会利用如下的代码:
$username = $_POST[“name”];$password = $_POST[“password”];$sql = “SELECT userid FROM usertable WHERE username='$username' AND password='$password';”;// run query...只要在username字段输入“admin';--”,这样就会被黑到,相应的SQL语句如下:
SELECT userid FROM usertable WHERE username='admin';
狡猾的黑客可以以admin登录,他们不需要知道密码,因为密码段被注释掉了。
4、没有使用UTF-8
美国、英国和澳大利亚的我们很少考虑除英语之外的其他语言。我们很得意地完成了自己的“杰作”却发现它们并不能在其他地方正常运行。
UTF-8解决了很多国际化问题。虽然在PHP v6.0之前它还不能很好地被支持,但这并不影响你把MySQL字符集设为UTF-8。
5、相对于SQL,偏爱PHP
如果你接触MySQL不久,那么你会偏向于使用你已经掌握的语言来解决问题,这样会导致写出一些冗余、低效率的代码。比如,你不会使用MySQL自带的AVG()函数,却会先对记录集中的值求和然后用PHP循环来计算平均值。
此外,请注意PHP循环中的SQL查询。通常来说,执行一个查询比在结果中迭代更有效率。
所以,在分析数据的时候请利用数据库系统的优势,懂一些SQL的知识将大有裨益。
6、没有优化数据库查询
99%的PHP性能问题都是由数据库引起的,仅仅一个糟糕的SQL查询就能让你的web应用彻底瘫痪。MySQL的EXPLAIN statement、Query Profiler,还有很多其他的工具将会帮助你找出这些万恶的SELECT。
7、不能正确使用数据类型
MySQL提供了诸如numeric、string和date等的数据类型。如果你想存储一个时间,那么使用DATE或者DATETIME类型。如果这个时候用INTEGER或者STRING类型的话,那么将会使得SQL查询非常复杂,前提是你能使用INTEGER或者STRING来定义那个类型。
很多人倾向于擅自自定义一些数据的格式,比如,使用string来存储序列化的PHP对象。这样的话数据库管理起来可能会变得简单些,但会使得MySQL成为一个糟糕的数据存储而且之后很可能会引起故障。
8、在查询中使用*
永远不要使用*来返回一个数据表所有列的数据。这是懒惰:你应该提取你需要的数据。就算你需要所有字段,你的数据表也不可避免的会产生变化。
9、不使用索引或者过度使用索引
一般性原则是这样的:select语句中的任何一个where子句表示的字段都应该使用索引。
举 个例子,假设我们有一个user表,包括numeric ID(主键)和email address。登录的时候,MySQL必须以一个email为依据查找正确的ID。如果使用了索引的话(这里指email),那么MySQL就能够使用 更快的搜索算法来定位email,甚至可以说是即时实现。否则,MySQL就只能顺序地检查每一条记录直到找到正确的email address。
有的人会在每个字段上都添加索引,遗憾的是,执行了INSERT或者UPDATE之后这些索引都需要重新生成,这样就会影响性能。所以,只在需要的时候添加索引。
10、忘记备份!
虽然比较罕见,但是数据库还是有崩溃的危险。硬盘有可能损坏,服务器有可能崩溃,web主机提供商有可能会破产!丢失MySQL数据将会是灾难性的,所以请确保你已经使用了自动备份或者已经复制到位。
11、Bonus mistake-不考虑使用其他数据库
对于PHP开发人员来说,MySQL可能是使用最广泛的数据库系统,但并不是唯一的选择。PostgreSQL和Firebird是最强有力的竞争者:这个两者都是开源的,而且都没有被公司收购。微软提供了sql server Express,甲骨文提供了10g Express,这两者都是企业级数据库的免费版本。有时候,对于一个较小的web应用或者嵌入式应用,SQLite也不失为一个可行的替代方案。