PHP,smarty 学习笔记二

PHP是Hypertext Preprocessor(超文本预处理器)的缩写,是一种服务器端,跨平台,HTML嵌入式的脚本语言,是一种服务器端,跨平台,HTML嵌入式的脚本语言,其独特的语法混合了C语言,JAVA语言和Perl语言的特点,是一种被广泛应用的多用途语言,尤其适合web开发。

PHP5的扩展库包括标准库SPL(Standard PHP Library)和外部扩展PECL(PHP Extension Community Library)。标准库即被编译到PHP内部的库。历史上标准库指的是Standard扩展(默认即编译进 PHP),但5.0出现后,标准库实际上成了代名词。PHP5新增内置标准扩展库:XML扩展库——DOM,SimpleXML以及 ICONV,SQLite等,而类似MySQL、MySQLI、Overload,GD2等这些库则被放在PECL外部扩展库中,需要时在php.ini 配置文件中选择加载。
从PHP5开始新增的扩展库

从PHP 5开始,PHP即新增了内置的标准扩展库:XML扩展库-DOM、SimpleXML、SPL、SQLite等,而像MySQL、MySQLi、Overload、GD2等这些库则被放在PECL外部扩展库中,需要时在php.ini配置文件中选择加载。

在Windows下加载扩展库

在Windows下加载扩展库,是通过修改php.ini文件来完成的。用户也可以在脚本中通过使用dl()函数来动态加载。PHP扩展库的DLL文件都具有php_前缀。

很多扩展库都内置于Windows版本的PHP中,要加载这些扩展库不需要额外的DLL文件和extension配置指令。Windows下的PHP扩展库列表列出了需要或曾经需要额外PHP DLL文件的扩展库。

加载动态库时,对编辑php.ini文件的注意事项

需要修改extension_dir设置以指向用户放置扩展库的目录或者放置php_*.dll文件的位置。例如:
extension_dir = C:\php\extensions

要在php.ini文件中启用某扩展库,需要去掉extension=php_*.dll前的注释符号,即将需要加载的扩展库前的分号";"删除。例如启用Bzip2扩展库,需要将下面这行代码:extension=php_bz2.dll改成:extension=php_bz2.dll

有些扩展库需要额外的DLL才能工作,其中一部分DLL文件包括在发行包中(PHP 5中在主目录下),但还有一些,如Oracle(php_oci8.dll)所需要的DLL没有绑定在发行包中。如果安装PHP 5,需将绑定的DLLC:\php 5\dlls复制到主目录C:\php中。值得注意的是,必须将C:\php 5放到系统路径PATH中。

某些DLL没有绑定在PHP发行包中。PECL中有日益增加、数目巨大的PHP扩展库,这些扩展库需要单独下载。注意:如果运行服务器模块版本的PHP,在修改了php.ini之后应注意重新启动Web服务

 

php中的4种标记风格说明

1.xml风格(标准风格推荐使用)

<?php
echo"这是xml风格的标记";
?>
xml风格的标记是常用的标记,也是推荐使用的标记,服务器不能禁用,该风格的标记在xml,xhtml中都可以使用。

2.脚本风格

<script languange="php">
echo'这是脚本风格的标记';
</script>
3.简短风格

<?这是简短风格的标记;?>
注:需要在php.ini中设置short _open_tag=on,默认是on,或者在 PHP 编译时加入了 Cenable-short-tags 选项。(PHP 3版本还可以通过 short_tags() 函数激活使用短标记。)

4.asp风格

<%
echo'这是asp风格的标记';
%>
注:需要在 php.ini 配置文件中开启 asp_tags = on;

上面asp风格与简短风格需要在php.ini中设置下。默认是不支持的。

注: 对 ASP 风格标记的支持是 3.0.4 版添加的。

注: 在以下情况应避免使用短标记:开发需要发行的程序或者库,或者在用户不能控制的服务器上开发。因为目标服务器可能不支持短标记。为了代码的移植及发行,确保不要使用短标记。

 

PHP代码添加注释的几种格式:
1、用 // 开头,作为单行注释。例如:
<?php
   // Author:mole
   //Date:2012-2-8
   echo"Welcome!";
?>

2、用 # 开头,作为单行注释。例如:
<?php
   # Author:mole
   #Date:2012-2-8
   echo"Welcome!";
?>

3、以 /* 开头,以 * / 结束的多行注释。例如:
<?php
   /*
    下面是计算员工平均
    工资的函数

   * /
  calculate();

?>
注:上面*和/之间的空格应该是没有的

 

PHP 支持八种原始类型。

四种标量类型:

布尔型(boolean) ——true or fasle 两个都是大小写不敏感的

整型(integer) ——32位系统,范围:-2 147 483 648~+2 147 483 647

浮点型(float)(浮点数,也作“double”)——32位系统, 范围:1.7E-308~1.7E+308

字符串(string)

两种复合类型:

数组(array)

对象(object)

最后是两种特殊类型:

资源(resource)

NULL ——
在下列情况下一个变量被认为是 NULL:

被赋值为 NULL。

尚未被赋值。

被 unset()。

语法
就是大小写不敏感的关键字 ,null 或 NULL  或 Null。

 

php基础--变量作用域
1 global
在函数外部的变量,在函数内部是访问不到的,但是在函数内部用global变量修饰后可以访问

2 超级全局变量
$_GET $_POST等内嵌超级全局变量无论在函数内还是函数外都是可见的。

3 条件语句和循环语句中的变量

 

作用域是指在一个脚本中某个变量可以使用或可见的范围。PHP具有6项基本的作用域规则:

内置超级全局变量可以在脚本的任何地方使用和可见。
常量,一旦被声明,将可以在全局可见;也就是说,它们可以在函数内外使用。
在一个脚本中声明的全局变量在整个脚本中是可见的,但不是在函数内部。
函数内部使用的变量声明为全局变量时,其名称要与全局变量名称一致。
在函数内部创建并被声明为静态的变量无法在函数外部可见,但是可以在函数的多次执行过程中保持该值
在函数内部创建的变量对函数来说是本地的,而当函数终止时,该变量也就不存在了。
$_GET和$_POST数组以及一些其他特殊变量都具有各自的作用域规则。这些被称作超级全局变量,它们可以在任何地方使用和可见,包括内部和外部函数。超级全局变量的完整列表如下所示:
$GLOBALS,所有全局变量数组(就像global关键字,这将允许在一个函数内部访问全局变量)
$_SERVER,服务器环境变量数组
$_GET,通过GET方法传递给脚本的变量数组
$_POST,通过POST方法传递给该脚本的变量数组
$_COOKIE,cookie变量数组
$_FILES,与文件上传相关的变量数组
$_ENV,环境变量数组
$_REQUEST,所有用户输入的变量数组,包括$_GET、$_POST和$_COOKIE所包含的输入内容(但是不包括PHP4.3.0版本以后的$_FILES) $_SESSION,会话变量数组

 

函数就是将一些重复使用的功能写在一个独立的代码块中,在需要时单独调用,创建函数的基本语法格式为
function fun_name($str1,$str2...#strn){
fun_body
}
1.function:声明自定义函数时必须使用的关键字;
2.fun_name:自定义的名称
3.$str1...$strn:的参数,可以有任意多个
4.fun_body:自定义函数的主体,是功能实现部分.
当函数被定义后,所要做的是就是调用这个函数,调用函数的操作十分简单,只需要引用函数名并赋予正确的参数即可完成函数的调用

 

PHP单引号和双引号区别

关于单引号和双引号的区别和效率问题。很多朋友了解的不是很清楚,一直以为PHP中单引号和双引号是互通的,直到有一天,发现单引号和双引号出现错误的时候才去学习研究。所以今天再拿出来谈谈他们的区别,希望大家不要再为此困惑。
" " 双引号里面的字段会经过编译器解释,然后再当作HTML代码输出。
' ' 单引号里面的不进行解释,直接输出。
从字面意思上就可以看出,单引号比双引号要快了。
例如:
$abc='my name is tome';
echo $abc //结果是:my name is tom
echo '$abc' //结果是:$abc
echo "$abc" //结果是:my name is tom
特别在使用MYSQL语句的时候,双引号和单引号的用法让新手不知所措,在这里,举个例子,来进行说明。
假设查询条件中使用的是常量,例如:
select * from abc_table where user_name='abc';
SQL语句可以写成:
SQLstr = "select * from abc_table where user _name= 'abc'" ;
假设查询条件中使用的是变量,例如:
$user_name = $_REQUEST['user_name']; //字符串变量

$user=array ("name"=> $_REQUEST['user_name',"age"=>$_REQUEST['age'];//数组变量
SQL语句就可以写成:
SQLstr = "select * from abc_table where user_name = ' " . $user_name . " ' ";
SQLstr = "select * from abc_table where user_name = ' " . $user["name"] . " ' ";
对比一下:
SQLstr="select * from abc_table where user_name = ' abc ' " ;
SQLstr="select * from abc_table where user_name =' " . $user _name . " ' ";
SQLstr="select * from abc_table where user_name =' " . $user["name"] . " ' ";
SQLstr可以分解为以下3个部分:
1:"select * from table where user_name = ' " //固定SQL语句
2:$user //变量
3:" ' "
1,2,3部分字符串之间用"." 来连接
[p=30, 2, left]
[/p]

====

一.首先想想PHP里所有的单词(其实应该叫符号)有几类.

1.PHP,mysql两方的关键词与函数.例如echo,print,mysql_connect等等.这些肯定不加引号的.

2.常量.新手可能用得不多,常量的好处是全局性,穿透函数.速度也快些不过新手可以暂时不管常量这玩意儿.

3.变量.前面带"$"号的就是变量.可以为变量设一个"值",例如一串字符,一个数字,逻辑(真/假)值等.也可以表示一组值(数组,对象等)

4.值.通常要给常量与变量设置值.赋值语句$a=\'abc\'中,右边的\'abc\'即为值.

5.函数的参数(在括号里的).可以是常量,变量,值三种.

变量(常量)与值的关系正如下列各种情况.

"颜色"与"红",

"长度"与100,

"日期"与2007年10月25号"

二.什么情况下用PHP引号

其实只有第4项"值"需要用到引号,函数的里也只有值要用引号.并且只有字符串(日期值可以当成字符串)内容需要用到引号.数字(可用可不用),真假(不能用)例外.

例子

三.单引号与双引号的区别

一般情况下两者是通用的.但双引号内部变量会解析,单引号则不解析.

例子

所以如果内部只有纯字符串的时候,用单引号(速度快),内部有别的东西(如变量)的时候,用双号引更好点.

四.字符串内部如果出现PHP引号怎么办--关于转义.

比如我们想输出: 我"是\'天才

这时候就必须用到转义了.转义即把本来有作用的符号转成无意义的字符.

这样就正常了,因为号把它后面的任何字符都转成无意义的符号.在这里来说,PHP解析器根本没把号后面的引号当成引号来看待.

同样的,还可以转义分号,$符号等特殊符号.

五.字符串的连接.

这是个麻烦的问题.一般来说,变量值,直接包含在双引号中就可以了.另外字符串的叠加用"."字符.

在复杂的情况里可以用大括号来包含,PHP便知道这是一个完整的东西,里面的引号不会影响到外面的引号关系.

与html的混合也很简单,最好养成HTML中全部用双引号,PHP中尽量用单引号的习惯.这样方便把大段的HTML代码复制过来,只要头尾加上单引号就是一个正确的字符串了.几百行的HTML代码也不用担心PHP引号错乱.

总结一下PHP引号使用原则

1.字符串的值用引号

2.PHP中尽量用单引号,HTML代码全部用双引号

3.在包含变量的时候,用双引号可以简化操作

4.复杂的情况下用大括号包起来

PHP引号还有一个用处就是,有的时候需要用php生成文本文件,换行符\n需要用双引号才能好使,单引号则会直接把\n当成字符输出。

 

PHP检测数据类型
检测数据类型即对数据类型进行检测,判断所检测类型是否属于检测类型,符合则返回真,否则返回假。检测数据类型定义如下:
is_bool
是否为布尔类型,例,is_bool(srue) is_bool(false)
is_string
是否为字符串型,例,is_string('string') is_string(1234)
is_float/double
是否为浮点型,例,is_float(3.1415) is_float('3.1415')
is_integer/int
是否为整型,例,is_integer(34) is_integer('34')
is_null
是否为空值,例,is_null(null)
is_array
是否为数组,例,is_array($arr)
is_object
是否为一个对象,例,is_object($obj)
is_numeric
是否为数字或由数字组成的字符串,例,is_numeric('5') is_numeric('bcc110')
示例

<?php
$boo="1234567890";
if(is_numeric($boo))
echo "变量boo属由数字组成的字符串类型:".$boo;
else
echo"无法判断";
?>

 

局部变量——用在函数内,作用域就是所在函数
全局变量——在函数外,作用域在整个php文件(包含了 include 和 require 引入的文件),但在函数中不能读到,除非重新申明为global
静态变量——用在函数内,被调用完后,内存不释放,保留最后值,多用来统计累加。