Php的基本语法介绍
1、php可以和HTML代码混合,但是一定要使用
<?php
//php代码
?>
可以在php中嵌入HTML代码
<?php
echo “hello world”;
//写一部分HTML代码
?>
<h1>hello</h1>
<?php
?>
2、还可以使用如下方法嵌入php代码(脚本)
<script language=”php”>
echo “<br/>测试”;
</script>
推荐这种写法
3、如果只是为了显示一个变量的值
<?=变量?>.
4、php代码注释的方法
多行注释
单行注释
Php的基本语法加强
1、php可以和HTML混合使用
2、Php的变量的定义使用
//php中,定义一个变量要以$符号开头
$a=888 //定义一个变量,名称为$a,然后给该变量赋一个值888
3、php的变量的数据类型,是变化的,php的变量类型是由上下文所决定的
4、Php是弱数据类型
5、Php区分大小写
$a=90;
$A=900;
6、php变量的名称以字母或者下划线开始,不能以数字、特殊字符开始
Php的数据类型
三大类
1、基本数据类型
①整型
②小数型(浮动性),包含单精度和双精度
③布尔类型(表示真和假)
④字符串型
2、复合数据类型
①数组(array)
②对象(object)
3、特殊数据类型
①null
②资源类型
二进制——原码、反码补码
基本概念
1、二进制的最高位是符号位:0表示正数,1表示负数
2、正数的原码、反码、补码都是一样的
3、负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)
4、负数的补码=它的反码+1
5、0的反码、补码都是0
6、Php没有无符号位(php中的数都是有符号的)
7、在计算机运算的时候,都是以补码的方式来运算
布尔类型
布尔类型就两个值:true false
e.g
//布尔类型
$a=true;
$b=false;
1、布尔值 FALSE 本身
2、整型值 0(零)
3、浮点型值 0.0(零)
5、不包括任何元素的数组
6、不包括任何成员变量的对象(仅 PHP 4.0 适用)
7、特殊类型 NULL(包括尚未赋值的变量)
$conn=mysql_connect(“localhost”,”root”,”root”)
If($conn){
echo “ok”;
}else{
echo “连接失败!”
}
出现echo “OK”的原因是,conn连接上,$conn=不为空,有值,所以返回为真值,
浮点数的细节
1、 浮点数(双精度或实数)
2、 浮点数的字长和平台相关,通常最大值为1.8e308并具有14位十进制数字的精度
小数的精度算法:从左边开始第一个非0的数开始计算
e.g $a=56.9999899 //a=56.9999899
$b=789.8812 3456 7854 3 //789.8812 3456 785
字符串的细节
$a=”hello”;
1、理论上,我们对字符串大小没有限制,即只要不超过内存限制即可
2、定义字符串的时候,可以用单引号,也可以用双引号,区别如下
$i=90;
$user1="hello$i"; //双引号认为输出的是值
$user2='hello$i'; //单引号认为输出的是字符
echo '<br/>user1'.$user1;
echo "<br/>user2".$user2;
//user1hello90
//user2hello$i
3、如果字符串是包围在单引号 ’ ’ 中,除了处理 \” 时,会输出 \”’外,其它都一样
当一个变量包含在 ”” 中时,会输出其值,包含在 ‘’ 中时,会原样输出
数据类型的自动转换
Php数据类型不是由程序猿决定的,确切的说,是由php根据该变量在上下文的运行时决定的
可以通过var_dump($变量1,$变量2.....方式显示数据类型
Php的表达式
任何有值的东西都是一个表达式
Php的算术运算符、比较运算符、逻辑运算符
+ - * / %
$a=90;
$b=7;
If($a%$b==0){
echo ‘能整除’;
}else{
echo ‘不能整除’;
}
and && 区别:
主要体现在优先级上,and 的优先级 and<=<&& or<=<||
三元运算符
格式:表达式1? 表达式2:表达式3
判断表达式1是否成立,为真则取表达式2,否则取表达式3
e.g
<?php
$a=30;
$b=50;
$c=$a>$b? "wrong":"right";
echo $c;
?>
//right
字符串运算符
echo "<br/>";
$a="hello world";
$b=" haha";
$c=$a.$b; //$a表示内容$b表示内容连接
echo $c;
当两个变量(基本数据类型)用 . 连接的时候,表示将两个内容拼接起来,都当作字串看待
类型运算符
基本语法:instanceof 用于确定一个PHP变量是否属于某一类class的类型,面向对象开发使用
echo "<br/>";
class dog{}
class cat{}
//创建对象
$cat1=new cat;
var_dump($cat1 instanceof dog);
//实际开发中,可以需要去判断某一个变量是否是某一个类型,不能判断基本数据类型
Php 三大流程控制
1、顺序控制
2、分支控制
①单分支
②双分支
③多分支
注:Switch首先按照case顺序进行配置,如果一个都没有匹配到,则执行
Default语句的内容, 如果遇到break,则跳出switch
If和switch的区别
If是对某一个范围的判断,而switch是对于该点的判断。
当分支是几个点的时候,就应当使用switch,
当分支是几个区域的时候,则考虑使用if
3、循环控制
For循环控制
基本语法结构:
For(循环初值;循环的条件;步长){
//语句;
}
While循环
先判断,再执行
do while 循环
先执行,到给定限制条件
Break语句
Break语句结束当前的for while do-while或者switch结构的执行
Break可以接受一个可选的数字参数来决定跳出几重循环
Continue语句
Continue语句在循环结构用来跳过本次循环中剩余的代码并在条件求值为真时,开始执行下一 次的循环,continue可接受一个可选的数字参数来决定跳过几重循环到循环结尾
goto
Goto操作符仅在PHP5.3及以上版本有效
注意事项:php中的goto有一定的限制,只能在同一个文件和作用域中跳转,也就是说无法跳 出一个函数或者类方法,也无法跳入另一个函数
常见的用法就是用来跳出循环或者switch,可以代替多层的break
e.g
goto a ;
echo’a’;
a;
echo ‘bb’;
常量
常量可以理解成是一种特殊的变量,一旦被定义,就不能再改变或者取消定义
常量和变量有如下不同
1、常量前面没有美元符号
2、常量用define()函数定义,而不能通过赋值语句
3、常量可以不用理会变量的作用域而在任何地方定义和访问
4、常量一旦定义就不能被重新定义或者取消定义
5、常量的值是标量(string,integer,float,boolean)
6、常量可以通过define或者const
7、使用常量:在程序中我们不希望某一个值变化,则考虑使用常量
e.g
<?php
//第一种方法
define(“TAX_RATE”,0.08);
echo TAX_RATE;
//第二种方法
const TAX_RATE2=0.1;
echo “-”.TAX_RATE2;
?>
函数
自定义函数的基本语法结构
Function 函数名(参数列表){
//函数体:(完成某一个功能的代码)
//返回值
return 返回值;
}
v php 中页面的互相调用
1、require() require_once()
2、Include() include_once()
e.g
require
<?php
Require (‘要引入的文件名’);
$filePath=’abc.php’
require $filePath;
require ‘要引入的文件名(路径)’
?>
//1、
require 'b.php';
//2、通过变量引入
$fileName='b.php';
require $fileName;
//3、
require ("b.php");
//函数的调用
abc();
注:require 和require_once区别
前者遇到即包含文件,后者会判断是否已经包含过了,如果包含过了,则不会再包含文件,一可以节省资源,二可以避免重复定义的错误。
include和include——once的区别
他们的作用和功能都可以把一个页面,包含到另外一个页面
基本用法
<?php
include (‘被包含的文件’);
include ‘被包含的文件’;
include $filePath;
?>
区别:
前者include遇到包含的文件,会再次包含,后者遇到包含的文件,就只包含一次
include和require的区别:
include如果出现错误,会继续执行,而require出现错误则会终止程序
做项目的时候,基本上使用require_once
require_once/require 应当放在php的最前边
只要见到函数,就开辟一个新栈
函数的基本结构
1、函数的参数列表可以是多个
2、函数的数据类型可以是php语言支持任意类型
3、函数名开头的字母,以_或者a—z,A-Z,不要用数字或者特殊字符开头
4、函数名不区分大小写,变量名区分大小写
5、一个自定义函数的变量是局部的,函数外不生效
6、使用global全局变量的时候,可使用在函数外的变量
7、为了防止全局变量的混乱情况可以使用unset($var)删除一个变量用于前边已经有某一个变量
8、函数的默认值问题
9、php默认是值传送,如果需要引用地址使用 &变量名
位运算
二进制:逢二进一,简单易于电子方式实现,同时,通过0.1的组合可以表示任意一个数
二进制有三个重要概念,
原码
用二进制来表示一个数,这个码就是原码
1-----> 原码 00000000 00000000 00000000 00000001
原码、反码、补码
1、二进制的最高位是符号位,0表示正数,1表示负数
2、正数的原码、反码、补码都是一样的
3、负数的反码=原码符号位不变,其它位取反
-1
原码 10000000 00000000 00000000 00000001
反码 11111111 11111111 11111111 11111110
补码 11111111 11111111 11111111 11111111
4、负数的补码=反码+1
5、0的反码,补码都是0
6、php没有无符号位,php中的数都是有符号位
7、计算机中,都是以补码的方式来运算的(不管一个数是正数还是负数,都要被转换成补码,然后进行运算)
位运算一览表
前四个是位运算
运算规则:
1、按位与&:两位全1,都为1
2、按位或 | :一个为1,全为1
3、按位异或 ^ : 一共为0,一个为1,结果为1,两个相同结果为0
4、按位取反 ~: 0->1 1->0
e.g
~2:
2的补码=原码:00000000 00000000 00000000 00000010
~2的补码: 11111111 11111111 11111111 11111101
~2的反码: 11111111 11111111 11111111 11111100
~2的原码: 10000000 00000000 00000000 00000011
~2=-3
~-5
原码10000000 00000000 00000000 00000101
反码11111111 11111111 11111111 11111010
补码11111111 11111111 11111111 11111011
~-5 取反 00000000 00000000 00000000 00000100
原码 00000000 00000000 00000000 00000100 ->4
2&3
2的补码 00000000 00000000 00000000 00000010
3的补码 00000000 00000000 00000000 00000011
2&3 00000000 00000000 00000000 00000010(补码=原码=2)
2|3 00000000 00000000 00000000 00000011(补码=原码=3)
2^3 00000000 00000000 00000000 00000001(补码=原码=1)
位移运算
运算的规则:
算术右移>>:低位溢出,符号位不变,并用符号位补溢出的高位
算术左移<<:符号位不变,低位补0
e.g
$a=1>>2;
1的补码: 00000000 00000000 00000000 00000001
1>>2 : 00000000 00000000 00000000 00000000(等于0)
$b=-1>>2
-1的原码: 10000000 00000000 00000000 00000001
-1的反码: 11111111 11111111 11111111 11111110
-1的补码: 11111111 11111111 11111111 11111111
-1>>2 11111111 11111111 11111111 11111111
反码: 11111111 11111111 11111111 11111110
原码: 10000000 00000000 00000000 00000001(等于-1)
数组
数组的创建:php中,数组就是关键字和值的集合
1、创建数组
$arr[0]=234;
$arr[1]=345;
$arr[2]=112;
php数组中,每一个元素存放的值可以是任意数据类型
2、创建数组
基本语法
$数组名=array(值.....)
e.g $arr=array(1,90,”hello”,true,null)
3、默认情况下,下标从0开始,实际上也可以自己指定
e.g $arr[‘logo’]=’北京’; $arr[‘hsp’]=123;
$arr=array(‘logo’=>’北京’,’hsp’=> 123,4=>453);
注:1、使用TRUE作为键名 可以用1 FALSE用0
2、使用小数作为key时,自动截断小数部分
3、不能用数组和对象作为key
可以使用print_r var_dump来显示数组的情况,var_dump更详细
一维数组的引用,键值要加引号 ””
php数组可以动态增长
array explode ( string $delimiter , string $string [, int $limit ] )
此函数返回由字符串组成的数组,每个元素都是 string的一个子串,它们被字符串 delimiter作为边界点分割出来。
e.g $str=” 北京 天津 上海 重庆”;
$arr=explode(“ ”,$str);
print_r($arr);
一维数组的遍历
foreach($arr as $key => $value){
}
删除数组的某一个键值 unset()函数,数组不会重新建立索引,即中间空出去
数组运算符
总结:1、数组可以存放任意类型的数据
2、数组的大小不必事先指定,可以动态增长
3、数组名可以理解为指向数组首地址的引用
4、数组中的元素以key=>value的形式存在
5、默认key值为当前最大的整数索引值,新的键名是改值+1
屏蔽notice错误 error_reporting(E_ALL ^ E_NOTICE)
二维数组
1、定义:
a) 语法:$a=array(array(),array()...)
b) e.g: $a=array(array(1,2),array(5,0));
/*
0 0 0 0 0 0
0 0 1 0 0 0
0 2 0 3 0 0
0 0 0 0 0 0
*/
//定义一个二维数组
$arr=array(array(0,0,0,0,0,0),array(0,0, 1, 0, 0, 0),array(0, 2, 0, 3, 0, 0),array(0,0,0,0,0,0));
//遍历二维数组(行)
for($i=0;$i<count($arr);$i++){
//遍历每行的数据
for($j=0;$j<count($arr[$i]);$j++){
echo $arr[$i][$j]." ";
}
echo "<br/>";
}
php面向对象
类和对象的关系
总结:
1、类是抽象的,代表一类事物
2、对象是具体的,是类的一个具体实例
3、类是对象的模板,对象是类的一个个体实例
成员属性的说明
1、成员属性是从某个事物提取出的,可以是基本数据类型(整数、小数、字符、布尔)也可以是是复合型数据类型(数组,对象)
2、访问(成员属性是public)
$对象名->属性名
如果一个文件,专门用于定义类,
类名.class.php
注:如果给函数传递的是基本数据类型(整数、小数、布尔、字符),传递的是什么
在默认情况下湿传递的量,如果希望传入地址
function test(&$变量......){
}
在php中,一个函数传递的是数组,默认情况是传值,如希望传入地址,则&$数组名
e.g <?php
$a=90;
$b=90.8;
$c=true;
$d="hello";
function test1(&$a,&$b,&$c,&$d){
$a=78;
$b=89.6;
$c=false;
$d="zhengzhou";
}
test1($a,$b,$c,$d);
echo $a."||".$b."||".$c."||".$d;
?> //78||89.6||||zhengzhou
<?php
$a=90;
$b=90.8;
$c=true;
$d="hello";
function test1($a,$b,$c,$d){
$a=78;
$b=89.6;
$c=false;
$d="zhengzhou";
}
test1($a,$b,$c,$d);
echo $a."||".$b."||".$c."||".$d;
?> // 90||90.8||1||hello
成员方法(函数)
函数和成员方法的关系
当把一个函数写到某个类中,则该函数可以称为成员方法
e.g 需求,希望人可以说话、可以做算术题、这样就需要使用到成员方法
成员方法的基本方法
访问修饰符号 function 函数名(参数列表){
//函数体
//return语句
}
<?php
class person{
public $name;
public $age;
public function speak(){
echo "我是一个好人";
}
public function count1(){
$res=0;
for($i=1;$i<=1000;$i++){
$res+=$i;
}
//谁调用就返回给谁
return $res;
}
public function count2($n){
$res=0;
for($i=1;$i<=n;i++)
$res+=$i;
}
return $res;
}
//使用函数
//创建一个人
$p1=new person();
//通过对象调用成员方法
for(;1;){
$p1->speak();
//echo $i;
$a=$a+1;
echo "<br/>".$a;
$p1->speak();
}
//做算术题
$res=$p1->count1();
echo '计算结果='.$res;
//输入数值计算
echo '计算结果是='.$p1->count2(100);
?>
类的定义
php面向对象编程
构造方法
class Person{
public $name;
public $age;
}
$p1=new Person();
//再给属性赋值
$p1->name=”宋江”;
$p1->age=33;
//需求,在创建一个对象的时候,初始化 name 、age
//构造方法 在定义类的时候,定义一个构造方法
e.g
class Person{
public $name;
public $age;
//构造方法
public function_construct(){
echo “构造方法”;
}
}
$p1=new Person();
注:1、构造方法没有返回值
2、自动调用
3、php4中构造方法,名字和类名一致
e.g public function Person(){
echo “OK”;
}
4、php5中有两种形式的构造方法_construct() 类名() ,
当同事存在时,优先调用_construct()
this本质可以理解为对象的地址
php类中只能有一个构造方法
小结:1、php4构造方法名和类名相同,php5的构造方法可以和类名相同,也可以使_construct
2、构造方法没有返回值
3、主要作用是完成对新对象的初始化,并不是创建对象本身
4、在创建新对象后,系统自动的调用该类的构造方法
5、一个类有且只有一个构造方法,php5只是两种形式,只能存在一个
6、如果没有给类自定义构造方法,则该类使用系统默认的构造方法
7、如果给类自定义了构造方法,则类的默认构造方法被覆盖
8、构造方法的默认访问修饰符是public
析构函数
析构函数在某个对象的所有引用都被删除或者当对象被显示销毁时执行
主要作用,释放资源(数据库的链接,图片资源,销毁对象)
function_destruct(){
//释放资源操作
}
e.g
<?php
class Person{
public $name;
public $age;
//构造函数
public function __construct($name,$age){
$this->name=$name;
$this->age=$age;
}
//析构函数
function __destruct(){
echo $this->name."销毁资源</br>";
}
}
$p1=new Person("贾宝玉",16);
$p2=new Person("林黛玉",14);
?>
注:1、析构函数会自动调用
2、析构函数用于被销毁
3、析构函数调用的顺序,先创建的对象后销毁
4、 进程结束时,对象成为垃圾对象(没有任何变量引用)的时候,析构函数会被立即调用,只要一个对象成为垃圾对象时,会立即调用析构函数,不会等待
5、析构函数主要作用是释放资源操作,并不是摧毁对象本身
6、在摧毁对象前,系统自动的调用该类的析构方法
7、一个类最多只有一个析构方法
静态方法
需求:当操作静态变量时,可以考虑静态方法
静态方法也叫类方法,静态方法是属于所有对象实例的
形式:
访问修饰符 static 方法名 () {}
注意:类方法中不能访问非静态属性(变量)
在类外部: 类名::类方法名 or 对象名->类方法名
在类外部: self ::类方法名 or 类名::类方法名
静态方法的特点:
1、静态方法去操作静态变量
2、静态方法不能操作非静态变量
注意:普通的成员方法,既可以操作非静态变量,也可以操作静态变量
e.g 统计所有学生所交的学费(D:\wamp\www\object\staticDemo.php)
php面向对象编程的三大特征:
1、封装
2、继承
3、多态
封装
访问控制修饰符
如果要访问protected和private修饰的成员变量,可以使用方法:
php提供方法:
_set(), _get()
_set()对protected或者private属性,进行赋值操作
_set($name,$value)
_get()获取protected或者private属性的值
_get($name)
e.g