1.php的类型
“" 与 "=”
"" 为松散比较,"=“为严格比较,”==="除比较值外,也比较类型
<?php echo '2==true: '; var_dump(2==true); echo '3==false: '; var_dump(3==false); ?>
运行它后结果为 2 == false: bool(true) 3 === false: bool(false)
php有一些常量,有8个魔术常量,它们的值随位置的改变而不一样
例举几个较为重要的常量:FILE ,LINE,FUNCTION,METHOD,NAMESPACE
-
FILE ,php4.0.2开始,它会包含一个绝对路径,而之前的有时会有相对路径
<?php
echo ‘文件在" ’ . FILE . ’ "’;
?php>
运行它后结果为 文件在" C:\Users\a.php "; -
LINE , 文件中的行号
<?php
echo ‘这在第"’ . LINE . ‘"行’;
?php>
运行它后结果为 这在第" 3 "行 -
FUNCTION , php5开始返回该函数定义的名字,有分大小写,php4的值为小写的
-
METHOD ,类的方法,php5开始返回它的名字, 有分大小写
-
NAMESPACE ,php5.3开始在命名空间的名字, 有分大小写, 它在编译时定义.
2.php字符串
php字符串 并置运算符 (.) 用于两个字符串值的连接
<?php $text1=" Good "; $text2=" morning "; echo $text1 . " " . $text2; ?>
运行它后结果为 Good morning
strlen() 返回字符串长度, 返回的按字符数量来算
<?php echo strlen("hello"); ?>
运行它后结果为 5- 中文字符一个占3个字符数,gbk的字符占2个,用mb_strlen设置指定输出字符的个数
<?php echo mb_strlen("你好",'utf-8'); ?php>
运行它后结果为 2
strops()在字符串查找一字符或文本,未找到便返回false 1.<?php echo strops(" hello ","o"); ?>
运行它后结果为 5
2.<?php echo strops("你好"); ?>
3.可用mb_strops查询中文字符位置, PHP_EOL的语法为换行
<?php echo strops('hello 你好','你好') . PHP_EOL; echo mb_strops('hello 你好','你好') ?>
‘
运行它后结果为 5 6
php运算符有多个,例如
x + y 为x和y的和
-x 为x取反
x % y 为x除以y的余数,也是它的模
3.php的数组
php有三种类型
数组 数值, 关联(带有指定键的数组),多维(包含一个或多个数组)
数值数组有 1.自动分配id键
$a=array(“1”,“2”);
2.人工分配id键
$a[0]=“1”; $a[0]=“2”;
数组排序 sort(), 对数组升序排序 rsort(),
对数组降序排序 asort()
根据关联数组的值进行升序排序
sort排序
<?php $a=array("1","2"); sort($a); print_r($a); ?>
运行它后结果为 Array ( [0] => 1 [1] => 2 )
rsort排序
<?php $a=array("1","2"); sort($a); print_r($a); ?>
运行它后结果为 Array ( [0] => 2 [1] => 1 )
asort排序
<?php $a=array("1","2"); sort($a); print_r($a); ?>
运行它后结果为 Array ( [0] => 2 [1] => 1 )
php全局变量,可在函数,类中使用 $GLOBALS 是一个包含全部变量的全局变量,变量名是数组的键 $_SERVER 是一个包含头信息,路径,脚本位置等信息的数组 $_POST 用于收集表单信息 php函数
<?php
function num($fnumber){
echo $fnumber . " a1.<br> "; }
echo ("the num is"); num("a1 a2");
echo ("the num is"); num("a1 a3");
?>
运行它后结果为 the num is a1 a2 the num is a1 a3
php返回值
<?php function add($a,$b){ $c=$a+$b; return $c; }
echo "1+2= " . add(1,2); ?>
运行它后结果为 1+2= 3
4.php命名空间
使用户编写的与php的类或函数的名字不冲突,也为标识符创建的一个别名. 一个命名的用大括号的比较好,少在程序的段落用多个命名空间.
命名空间有分为几个:非限定的,不包含前缀的名称 限定的,包含前缀的名称
完全限定的,包含全局前缀操作符的名称
5.php面向对象
面向对象有封装: 物体的属性和行为绑定,并放置在一个逻辑单元, 继承: 一个类继承另一个类,
多态: 相同的函数或方法作用于多种类型的对象,并获得不同的结果等等
构造函数: 创建初始化对象,与new字符用来创建对象的语句. 析构函数: 当对象结束生命周期时自动执行析构函数, 例如程序退出前用delete. 成员方法
<?php $a->setName("1"); $b->setName("2"); //调用成员函数,获取名称
$a->getName("1"); $b->getName("2");
?>
构造函数
<?php $a=new Site('1'); $b=new Site('2'); //调用成员函数,获取名称
$a->getName(); $b->getName(); ?>
调用父类构造方法,php不会自动调用父类的构造方法,需在子类构造方法中调用parent::方法名
class a{ function b(){
print "a1" . PHP_EOL;
} }
class c {
function b extends a(){
function b(){
parent::b();
print "a2";
}
}
运行它后结果为 a1 a2
析构函数
<?php class a1{
function a2(){
print "\n";
this->name="a1";
}
function b1(){
print "destroy" . $this->name . "\n";
}
}
$obj=new a1();
?>
php使用extends继承,不过它不支持多继承 方法重写,为方法覆盖 继承父类的方法可改写
<?php
class a1{
function getName(){
echo $this->name . PHP_EOL;
return $this->name;
}
?>
类属性若用var定义则为公有, 类可实现多个接口,用逗号分隔多个接口的名称
6.php的数据库连接
php用mysqli或pdo连接数据库,mysqli的面向对象,pdo的面向过程 mysqli的可通过http://php.net/manual/en/mysqli.installation.php安装,pdo也可通过有关网页下载
<?php $servername="localhost";
$username="username"; $password="password";
$connect=new mysqli($servername,$username,$password);
if($connect->connect_error){
die("连接错误: " . $connect->connect _error);
}
echo "连接成功";
?>
5.2.9之前的可用此语句
if(mysqli_connect_error()){
die("连接错误: " . mysqli_connect_error()); } //关闭mysql
$connect->close(); //数据库创建
$sql="CREATE DATABASE book";
if($connect->query($sql)===TRUE){
echo "数据库成功";
}else{ echo "错误" . $connect->error;
} //插入数据
$sql="INSERT INTO book2(name,id,password) VALUES('a','1','admin1')";
if($connect->query($sql)===TRUE){
echo "数据库成功";
}else{
echo "错误" . $sql . "<br>" . $connect->error;
}
查询多条语句需在if语句后添加一句: $connect->multi_query($sql)===TRUE
php数据库连接
pdo的语句不可在等号两边有空格,需要一字符, 若有空格,或许会报错. php 预处理语句减少语句查询时间,参数值使用不同协议,对SQL注入有用.
//预处理语句和绑定
$stma1=$connect->prepare("INSERT INTO book1(name,id,password)");values(?,?,?)");
$stma1->bind_param("a","$name","$id","$password"); //设置参数
$name="a1";
$id="1";
$password="admin1";
$stma1->excute(); //输出信息
$sql="SELECT name, id, password FROM book"; $res=$connect->query($sql);
if($res->num_rows>0){
while($row=$res->fetch_assoc()){
echo "id: " . $row["name"]. " - Name: " . $row["id"]. " " . $row["password"]. "<br>";
}
} else {
echo "查询错误";
}
7.php表单处理
<html>
<head>
<meta charset="utf-8">
<title>hello</title>
</head>
<body> <form action="a1.php" method="post"> 名字:
<input type=".text" name="fname"> id:
<input type=".text" name="fid">
<input type="submit" value="提交">
</body> </html> a1.php hello
<?php echo $_POST["fname"];
?><br>
<?php echo $_POST["id"];
?>
8.php下拉菜单
<?php $q=isset($_GET['q'])? htmlspecialchars($_GET['q']):''; if($q){ if($q=='a1'){ echo 'a1';
}else if($q=='a2'){
echo 'a2';
}else if($q=='a2'){
echo 'a2'; }
}else{
?>
<form action="" method="get">
<select name="q">
<option value="">选择一个站点</option>
<option value="a1">a1</option>
<option value="a2">a2</option>
</select> <input type="submit" value="提交">
</form> <?php }
?>
$_GET变量接受以get方式发送的请求,
$_POST变量接受以post方式发送的请求, $_REQUEST支持两种方式请求,get显示在url(有字符数限制),post不会在url显示,可传递较多数据 php表单验证 $_SERVER[“aPHP_SELF”] 可发送数据到当前页面,而不是跳转到不同页 htmlspecialchars()函数将一些预定义的字符转换为HTML,若输入特殊符号,用它可避免表单的问题.