|
1.php4种标签风格及3种注释风格
i.标签风格
a.XML风格
b.ASP风格
c.脚本风格
echo "hello world!";
d.极简风格
注意:当使用极简风格和ASP风格时需要在php.ini文件中配置short_open_tag和asp_tags设置为on
ii.注释风格
a.c++风格的单行注释 //
b.c++风格的多行注释 /**/
c.shell风格的注释 #
2.php脚本执行的3种参数传递与解析
a.$argc和$argv 传递参数
执行结果: php.exe .\hello.php hello world -a 123
paras count : 5Array
(
[0] => .\hello.php
[1] => hello
[2] => world
[3] => -a
[4] => 123
)
b.getopt()函数解析参数
执行结果:php test.php -a 345 -b 12q3
Array
(
[a] => 345
=> 12q3
)
c.提示用户输入
3.php数据类型
php的变量使用$开头,属于动态数据类型,数据类型包括:
boolean string integer float array object resource null值
数据类型的定义:
a.string 单引号和双引号字符串的区别
同shell中的单双引号的区别相同,双引号的字符串需要先执行递归的变量替代
$a='hello world';
echo "hi,$a";
b1.string的界定符输出
目的:增强可读性
$string=编写php脚本;对表单元素的value属性进行赋值
include 和require的执行过程都是先将代码原本的拷贝到当前文件再执行。
return的效果也可以理解成将代码返回。return后面的代码将不会被拷贝。
这种拷贝有一个缺陷就是:同名变量或类有可能产生错误。
12.php与JavaScript交互
a.js的一些常识
js是一种由浏览器运行解析的脚本(也可以由服务器执行)。可以在不与服务器交互的条件下实现动态网页。
事件驱动:js是基于对象的语言。采用了事件驱动,当激发了某些事件时将执行相应的js代码。
js事件相应模式:
js的常用事件:onclick,ondblclick,onmousedown,...可以在网上查询js常用事件
与html解耦合: 包含外部文件
在页面底部(之前)引入js脚本,原因:由于js加载阻塞页面,而HTML是下载多少渲染多少,因此我们把它至于页面底部,让UI线程先执行完再加载js脚本
13.日期与时间
14.cookie与session
cookie:
a.cookie是从一个web页面到下一个web页面的数据传递方法,存储在客户端;session是让数据在页面中持续有效的方法,存储在服务器端。功能:记录访客的信息;在页面之间传递变量;将所查看的Internet页缓存在cookie临时文件夹中;
b.php设置cookie
必须写在文件开头
浏览器会定时清流cookie,即使是未过期cookie也可能在cookie容量满时被清理
session
a.session以随机且唯一的session_id为文件名保存在服务器的文件中,该session_id则是保存在cookie中
写session:
读session
删除session
unset($_SESSION['admin']);
$_SESSION=array();//删除所有session
session_destory();//彻底销毁会话,确定会话结束时,应该这么做
b.session的过期时间(只有存在cookie时才能使用)
i.session_set_cookie_params将设置session_id的过期时间
ii.setcookie设置session_id的过期时间
c.session只能使用当前session,如果想用上一个session,那是不可能的,因为无法得知session id。
d.session_id的4种传递方式
i.通过cookie传递,默认.需要客户端浏览器打开cookie。
ii.设置php.ini中的session.use_trans_sid=1,让PHP自动跨页面传递session_id
iii.通过GET方法,隐藏表单传递session_id
iv.使用文件或者数据库存储session_id,在页面间传递中手动调用
15.php的图形图像处理技术
16.php文件处理
17.php面向对象
a.定义
与c++相似
final class demo{
public function __construct(){ //构造函数
echo __METHOD__.":".__LINE__."\n";
}
public function func($param){//普通函数
$param++;
echo "method func $paramn";
}
public function __destruct(){ //析构函数
echo __METHOD__.":".__LINE__."\n";
echo $this->sex;
}
//public $name = 123+456; 错误:初始化时不能带有计算
static $a = '$a';
const A = 'A';
public $name = '凤姐';
protected $sex = '男+女';
private $age = 23;
}
类的构造及成员的调用:$demo = new demo(); $demo->func(1);
成员的可见性有:public protected private 3种
其它修饰符:static final const
成员的调用方式: $this->property
b.类中的魔术方法(具有一定意义的方法)
i. 魔术方法必须被定义为公共的,所有其他魔术方法都必须如此
ii. 从PHP 5以后的版本,PHP中的类就可以使用魔术方法了。其规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是为了重载已有的魔术方法,接下来列出一些魔术方法,如果大家想详细了解可以针对某一个进行查询了解,这里就不大篇幅的介绍了。
b1.__construct() 构造方法
__destruct()析构方法
b2.__autoload() 自动加载魔术方法。有的时候,在文件众多的项目中,要一一将所需类的文件都 include 进来,PHP 提供了 __autoload()方法,它会在试图使用尚未被定义的类时自动调用。 通过调用此函数,脚本引擎在PHP 出错失败前有了最后一个机会加载所需的类。
加入在Person.php中存在Person类,则当在另一个文件中调用时可以这样:
b3.__get() 当调用一个未定义的属性时,此方法会被触发,传递的参数是被访问的属性名。
__set() 给一个未定义的属性赋值时,此方法会被触发,传递的参数是被设置的属性名和值。 这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性)。
__isset() 当在一个未定义的属性上调用isset()函数时调用此方法
__unset() 当在一个未定义的属性上调用unset()函数时调用此方法
运行该例子,输出:
在直接设置私有属性值的时候,自动调用了这个 __set() 方法为私有属性赋值
在直接获取私有属性值的时候,自动调用了这个 __get() 方法
我的名字叫:张三
b4.__call( $method, $arg_array ) 当调用一个未定义的方法是调用此方法,这里的未定义的方法包括没有权限访问的方法;如果方法不存在就去父类中找这个方法,如果父类中也不存在就去调用本类的__call()方法,如果本类中不存在__call()方法就去找父类中的__call()方法。
b5.__clone()如果想复制一个对象则需要使用clone方法
如果想在克隆后改变原对象的内容,需要在类中添加一个特殊的 __clone() 方法来重写原本的属性和方法。__clone() 方法只会在对象被克隆clone的时候自动调用。
b6.
__toString()方法在将一个对象转化成字符串时自动调用,比如使用echo打印对象时
__sleep() 串行化的时候用
__wakeup 反串行化的时候调用
__set_state()当调用var_export()时,这个静态 方法会被调用(自PHP 5.1.0起有效)
__invoke当尝试以调用函数的方式调用一个对象时,__invoke 方法会被自动调用。
__callStatic(PHP 5.3.0以上版本有效) 是为了处理静态方法调用
c.继承与多态
c1.范围解析操作符(::)
作用:范围解析操作符或者更简单地说是一对冒号,可以用于访问静态成员,类常量,还可以用于覆盖类中的属性和方法。self,parent 和 static这三个特殊的关键字是用于在类定义的内部对其属性或 方法进行访问的。范围解析操作符(::)与类名连用,可以用于访问静态成员、方法和常量;与parent连用,可以访问被覆盖类中的成员和方法。
c2.接口interface与实现implements
class 子类 extends 父类 implemtns 接口1, 接口2, ...
{
......
}
interface User{
function getDiscount();
function getUserType();
}
//VIP用户 接口实现
class VipUser implements User{
// VIP 用户折扣系数
private $discount = 0.8;
function getDiscount() {
return $this->discount;
}
function getUserType() {
return "VIP用户";
}
}
d.对象的序列化与反序列化->存储
序列化完整过程包括两个步骤:一个是序列化,就是把对象转化为二进制的字符串,serialize() 函数用于序列化一个对象;另一个是反序列化,就是把对象被序列转化的二进制字符串再转化为对象,unserialize() 函数来反序列化一个被序列化的对象。这样整个过程下来,对象内的类型结构及数据都是 完整的。
18.php加密技术
19.php操作mysql数据库
resource mysql_connect("hostname","username","password"); //成功返回连接conn,失败返回null
mysql_select_db(string dbname[,resource conn]);//选择使用的数据库 mysql_query("dbname"[,conn])
$result=mysql_query(string query[,resource conn]);//适合所有sql语句,语句中不能加";"
$info=mysql_fetch_array($result[,int result_type]); 从数组结果中获取递归一行信息,返回数组;如果是select则$info的键为字段的名字,如果到底尾部则false
$info=mysql_fetch_object($result[,int result_type]); 获取一行作为对象,成员为字段名
$info=mysql_fetch_row($result[,int result_type]); 返回数组,但是是以下标索引的。
int mysql_num_rows()获取查询结果中总的记录数
20.php的PDO
a.支持的数据库
PDO支持MS SQL SERVER,MYSQL,ODBC,ORACLE,POSTGRE SQL等。
需要的php版本:php5.1以上
b.当数据库发生变化时只需要修改PDO的DSN数据源名称
c.PDO连接mysql
$dbh = new PDO('mysql:host=localhost;dbname=test', 'root', 'nsfocus123');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO user VALUES ('5', 'xiaohua');";
$stmt = $dbh->prepare($sql);
$stmt->execute();
echo $dbh->lastinsertid();
$sql = "SELECT * FROM user";
$stmt = $dbh->prepare($sql);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ // print_r($stmt->fetchAll() 以列名为索引的数组
print_r($row);
}
关于fetch的参数取值:
PDO::FETCH_ASSOC 从结果集中获取以列名为索引的关联数组。
PDO::FETCH_NUM 从结果集中获取一个以列在行中的数值偏移量为索引的值数组。
PDO::FETCH_BOTH 这是默认值,包含上面两种数组。
PDO::FETCH_OBJ 从结果集当前行的记录中获取其属性对应各个列名的一个对象。
PDO::FETCH_BOUND 使fetch()返回TRUE,并将获取的列赋给在bindParm()方法中指 定的相应变量。
PDO::FETCH_LAZY 创建关联数组和索引数组,以及包含列属性的一个对象,从而可以在这三种接口中任选一种。
21.ThinkPHP架构
22.一些有用的函数
a.trigger_error("输出信息", E_USER_ERROR);触发fatal错误,并退出程序执行
b.exit(0); 退出当前进程
c.$pid = pcntl_fork(); 创建子进程,需要pcntl模块
23.php的模块安装方法
a.下载需要安装的源码,编译生成.so或.dll
b.将动态库复制到php安装目录下的ext目录中
c.修改安装目录下的php.ini配置文件,在[php]字段中添加 extension=***.so
e.php -m |grep *** 查看模块是否安装成功
24. 内建函数和默认常量
unset(变量) 删除某个变量
is_null(变量)判断变量是否为null
is_bool(变量)
is_string(变量)
is_float/is_double(变量)
is_integer/is_int(变量)
is_array(变量)
is_object(变量)
is_numeric(变量)
define(变量,value)
defined(变量)
strlen(string) #大量使用了c语言的库函数
substr()
explode() //字符串拆分
implode() //(数组)合并为字符串
echo
print_t
count() //统计数组元素个数
array_push() //向数组最后添加一个元素
array_pop() //数组元素个数减一,返回最后一个元素
array_search() //按值搜索元素,并返回键
array_key_exists(key,array) 键是否存在
array_unique() //删除数组中的重复元素
self:: 指代类本身 $this->指代对象本身
默认常量
__FILE__ __LINE__
PHP_VERSION PHP_OS
E_ERROR 常量,指向最近的错误处
|
|
|