PHP基本语法
PHP是超文本预处理器 由服务器解析执行 可以与 html 进行混编(嵌入) ,PHP是一种弱类型语言
1.1 PHP标记
PHP和其他Web语言一样,都是用一对标记将PHP代码包含起来,以便和HTML代码区分开来。PHP支持4种风格的标记,如表所示。
标记风格 | 开始标记 | 结束标记 |
XML风格 | <?php | ?> |
简短风格 | <? | ?> |
Script风格 | <script language="php"> | </script> |
ASP风格 | <% | %> |
在表中,每种标记风格都有各自的开始标记和结束标记。
1.XML风格
该风格的标记以“<?php”开始,以“?>”结束,具体示例如下:
<?php
echo "Connection established.\n";
?>
XML风格是本书中采用的风格,也是推荐使用的风格。该风格的标记在XML、XHTML中都可以使用,服务器不可以禁用这种风格的标记。
2.简短风格
该风格的标记省略了XML风格中的“php”,具体示例如下:
<?
echo "Connection established.\n";
?>
如果需要使用简短风格,必须在配置文件php.ini中设置short_open_tags选项为On,然后重启Apache服务器。因为这种标记风格在许多环境中的默认设置是不支持的,因此本书不推荐使用这种标记风格。另外,如果脚本中包含XML语句,应禁止使用这种风格的标记。
3.Script风格
该风格的标记以“<script language="php">”开始,以“</script>”结束,具体示例如下:
该风格的标记类似于JavaScript语言的标记,该风格的标记不需要进行配置,一般不推荐使用该风格标记,此处只需了解即可。
4.ASP风格
该风格的标记以“<%”开始,以“%>”结束,具体示例如下:
如果需要使用这种风格标记,必须在配置文件php.ini中设置asp_tags选项为On,然后重启Apache服务器。因为这种标记风格在许多环境中的默认设置是不支持的,因此本书不推荐使用这种标记风格
1.2 PHP注释
注释即对程序代码的解释,在写程序时需适当使用注释,以方便自己和他人理解程序各部分的作用。在执行时,它会被PHP解释器忽略,因此不会影响程序的执行。PHP支持C++、C、Shell三种风格的注释。
1.2.1.C++风格的单行注释
该注释是从“//”开始,到该行末尾或PHP结束标记之前结束。
1.2.2.C风格的多行注释
该注释从“/*”开始,到“*/”结束。
但不可以嵌套多行注释,下面的代码是错误的用法,具体示例如下:
1.3 语法规则
PHP标识符与关键字
在PHP语言中,同样也需要对程序中各个元素命名加以区分,这种用来标识变量、函数、类等元素的符号称为标识符。
PHP语言规定,标识符是由字母、数字和下画线组成的,并且只能是以字母或下画线开头的字符集合。在使用标识符时应注意以下几点:
命名时应遵循见名知义的原则。
系统已用的关键字不得用作标识符。
关键字虽然可作为变量名使用,但容易造成混淆,不建议使用。
关键字是系统已经定义过的标识符,在程序中已有了特定的含义,如echo、class等,因此不能再使用关键字作为其他名称的标识符。
下表中列出了PHP中常用的关键字。
PHP变量
讲解变量的定义、变量的数据类型、检测数据类型、可变变量、变量的引用赋值等关于PHP变量的内容。
在PHP中,若要存储数据,就需要用到变量。在PHP中,变量是由$和变量名组成的,并且变量的命名规则与标识符相同。此处需注意,变量名是区分大小写的,如$Apple与$apple是两个不同的变量。
变量类型
PHP可以为不同的数据指定不同的数据类型。PHP支持8种数据类型,如图所示。
PHP的数据类型分为标量类型(boolean、integer、float、string)、复合类型(array、object)和特殊类型(resource、NULL)。本节只介绍标量类型
1.boolean(布尔型)
布尔型是PHP中较常用的数据类型之一,该类型数据只能为true或false(true表示真,false表示假,这两个值是不区分大小写的),具体示例如下:
2.integer(整型)
整型表示存储的数据是整数,例如1、-1等。在计算机语言中,整型数据可以用二进制、八进制、十进制、十六进制表示,并且在前面加上+或-表示正整数或负整数。如果用二进制表示,数字前必须加上0b或0B;如果用八进制表示,数字前必须加上0;如果用十六进制表示,数字前必须加上0x或0X,具体示例如下:
二进制数是由0、1组成,每逢2进1位;八进制数是由0~7的数字序列组成,每逢8进1位;十六进制数是由0~9的数字和A~F的字母组成序列,每逢16进1位。此处需注意,整型数值有最大取值范围,它的范围与平台有关。
4.string(字符串型)
字符串是一系列的字符,字符串可以使用单引号、双引号、定界符三种形式来定义。虽然三种形式都可以定义一个字符串,但它们却有本质的不同,接下来详细讲解这三种形式。
1)单引号形式
该形式就是将字符序列用单引号括起来。如果需要在字符串中表示一个单引号,则需要使用转义字符(\,也称反斜杠)转义。如果需要在字符串中表示反斜杠,则需要使用两个反斜杠。此外,单引号这种形式的字符串只能转义单引号和反斜杠。PHP中常见的转义字符如表所示。
2)双引号形式
该形式就是将字符序列用双引号括起来,可以转义一些字符,还可以将字符串的变量名替换为变量值(即可以解析其中包含的变量)
3)定界符
字符串的另一种形式是使用定界符(<<<)。该形式在<<<之后提供一个标识符用来表示开始,然后是包含的字符串,最后是用同样的标识符表示结束字符串。注意,结束标识符必须从行的第一列开始,并且后面除了分号不能再包含其他任何字符。
定界符形式的字符串可以很容易定义较长的字符串,因此通常用于从文件或数据库中大段地输出文档。
检测数据类型
在PHP中,变量的类型是由存储的数据决定的。为了检测变量所赋的值是否符合期望的数据类型,PHP中内置了一些检测数据类型的函数,如表所示。
函数 | 功能 |
is_bool() | 检测变量是否为布尔型 |
is_int() | 检测变量是否为整型 |
is_float() | 检测变量是否为浮点型 |
is_string() | 检测变量是否为字符串型 |
is_array() | 检测变量是否为数组型 |
is_object() | 检测变量是否为对象型 |
is_resource | 检测变量是否为资源型 |
is_null() | 检测变量是否为空值 |
is_numeric() | 检测变量是否为数字或数字组成的字符串 |
在表中,若变量属于某个类型,则函数返回true,否则返回false。
PHP变量
常见的PHP继承开发环境
变量是指在程序执行过程中值可以变化的量,常量是指在程序执行过程中值不变的量,例如圆周率π就可以定义为常量。在PHP中,常量是通过define()函数来定义的,其语法格式如下:
该函数有三个参数,具体如表所示。
另外,mixed 说明一个参数可以接受多种不同的(但不一定是所有的)类型。
获取常量的方法有两种:一种是直接使用常量名获取对应的值,另一种是使用constant()函数获取对应的值。
constant()函数的语法格式如下:
参数$name为需要获取常量的名称,也可以为存储常量名的变量。该函数调用成功,返回常量值,否则提示常量没有被定义。
defined()函数可以判断一个常量是否已定义,其语法格式如下:
参数$name为需要判断的常量名,若该常量已定义,则返回true,否则返回false。
预定义常量
预定义常量是指系统中已定义的常量,可以在程序中直接使用,具体如表所示。
常量名 | 说明 |
__FILE__ | 当前文件路径 |
__LINE__ | 当前所在行号 |
__FUNCTION__ | 当前的函数名 |
__CLASS__ | 当前的类名 |
__METHOD__ | 当前对象的方法名 |
PHP_OS | PHP运行的操作系统,如WINNT、UNIX |
PHP_VERSION | 当前PHP的版本号 |
TRUE | 布尔值true |
FALSE | 布尔值false |
NULL | 空值null |
E_ERROR | 错误,导致PHP脚本终止运行 |
E_WARNING | 警告,不会导致PHP脚本终止运行 |
E_PARSE | 解析错误,由程序解析器报告 |
E_NOTICE | 非关键的错误 |
数据类型转换
数据类型转换是指变量或值从一种数据类型转换为另一种数据类型。转换有两种方式:自动类型转换和强制类型转换。
自动类型转换
自动类型转换是指数据类型由PHP自动转换,使用时需注意以下几点:
1. 其他类型转换为布尔类型
当其他类型需要转换为布尔类型时,整型0、浮点型0.0、字符串型""与"0"、不包含任何元素的数组、不包含任何成员变量的对象、NULL会被转换为false,其他值被转换为true。
2. 布尔型转换为整型
当布尔型转换为整型时,true转换为整数1,false转换为整数0。
3. 字符串型转换为整型或浮点型
如果字符串是数字序列的字符,则转换为该数字,否则会出现警告。
4. 布尔型转换为字符串型
true转换为"1",false转换为""。
5. 整型或浮点型转换为字符串型
整型或浮点型数据的字面样式转换为字符串形式。
强制类型转换
强制类型转换是使用者手动将某个数据类型转换成目标数据类型,其中最简单的方法是在需要转换的变量前加上用圆括号括起来的目标类型,具体如所示。
转换操作符 | 说明 | 转换操作符 | 说明 |
(boolean) | 转换成布尔型 | (float) | 转换成浮点型 |
(string) | 转换成字符串型 | (array) | 转换成数组 |
(integer) | 转换成整型 | (object) | 转换成对象 |
除了上述转换方式外,类型转换还可以通过函数intval()、floatval()、strval()和settype()实现,具体如表所示。
函数 | 说明 |
int intval (mixed $var [, int $base = 10 ]) | 返回变量$var的integer数值 |
float floatval (mixed $var) | 返回变量$var的float数值 |
string strval (mixed $var) | 返回变量$var的string值 |
bool settype (mixed &$var , string $type) | 将变量 var 的类型设置成 type |
通过圆括号方式进行的强制类型转换和上表中前三种函数进行的强制类型转换都没有改变这些被转换变量的类型与值,它们仅仅是将转换得到的新类型数据赋给新的变量,但上表中的settype()函数可以将变量的本身类型转换为其他类型。
PHP编程应该学习的基础知识,包括PHP基本语法、PHP变量、PHP常量、数据类型转换、流程控制语句等
变量及操作
PHP是弱类型语言,变量的类型通常是根据该变量的值决定
PHP中以 $ 作为前缀来定义变量,以a~z(大小写)或 _ 下划线定义变量名
变量是内存中用于临时存储值空间,称为变量名。变量名是用于对这个内存中的数据进行引用的
在大多数编程语言中,变量只能保持一种类型的数据,而且这个类型必须在使用变量前声明,例如C语言中。
在PHP中,变量的类型通常是根据该变量使用的上下文在运行时(即变量的值)决定的。
简单来说,var = 1;就是数字,var2 = '1’就是字符串,变量类型是由值决定的。
变量及操作
PHP中以 $ 作为前缀来定义变量,以a~z(大小写)或 _ 下划线定义变量名
变量是内存中用于临时存储值空间,称为变量名。变量名是用于对这个内存中的数据进行引用的
在大多数编程语言中,变量只能保持一种类型的数据,而且这个类型必须在使用变量前声明,例如C#语言中。
在PHP中,变量的类型通常是根据该变量使用的上下文在运行时(即变量的值)决定的。
简单来说,var = 1;就是数字,var2 = '1’就是字符串,变量类型是由值决定的
语法:
$变量名=值;
说明:
必须以$符开头
变量名只能包含字母、数字、下划线,只能以字母、下划线开头,不能以数字开头(数字不能紧挨着$)
变量严格区分大小写
<?php
// 定义变量
$v1 = 1;
$v2 = 1;
$result = $v1 + $v2;
echo $result;
传值与引用
传值赋值
直接使用 =
将变量的值赋值给另一个变量。
$a = 1;
$b = $a;
$b = 2;
echo $a;//结果是1
PHP 脚本在服务器上执行,然后将纯 HTML 结果发送回浏览器。
基本的 PHP 语法
PHP 脚本可以放在文档中的任何位置。
PHP 脚本以 <?php 开始,以 ?> 结束:
<?php
// PHP 代码
?>
PHP 文件的默认文件扩展名是 ".php"。
PHP 文件通常包含 HTML 标签和一些 PHP 脚本代码。
下面,我们提供了一个简单的 PHP 文件实例,它可以向浏览器输出文本 "Hello World!":
<!DOCTYPE html>
<html>
<body>
<h1>My first PHP page</h1>
<?php
echo "Hello World!";
?>
</body>
</html>
PHP 中的每个代码行都必须以分号结束。分号是一种分隔符,用于把指令集区分开来。
通过 PHP,有两种在浏览器输出文本的基础指令:echo 和 print。
PHP 中的注释
<!DOCTYPE html>
<html>
<body>
<?php
// 这是 PHP 单行注释
/*
这是
PHP 多行
注释
*/
?>
</body>
</html>
php的一些基本语法
1.php标记符
<?php
echo 'Hello';
?>
2.常量
const THE_VALUE = 100;
define('THE_VALUE',100);
变量 $a=10;
3.函数
functiontraceHello($name){
echo 'hello '.$name.'<br>';//字符串连接
//echo "hello $name <br>";
return 1;//返回值
}
调用:
1.traceHello('zhangsan');
2.$func='traceHello'
$func('zhangsan');
4.流程控制
1.if else
function getLevel($score){
if($score>=90){
return'优秀';
}elseif($score>=80){
return '良好';
}else{
return '不好';
}
}
2.switch
function getLevel($score){
$result = '不好';
switch(intval($score/10)){//intval()取整或取出其中整数
case 10:
case 9:
$result = '优秀';
break;
case 8:
$result = '良好';
break;
default:
$result = '不好';
//break;
}
return $result;
}
3.for循环
for($i=0;$i<100;$i++){
if($i==20){ break; }
if($i==40){ continue; }
}
4.while循环
$i=0;
while(%<10)
...
$i++;
}
5.do while循环
$i=0;
do{
...
$i++;
}while($i<100);
5.逻辑运算符
|| && !
6.字符串常用方法
strpos($str,'o');
substr($str,2);
str_split();
explode(' ',$str);
7.数组
$arr=array();
$arr[0]='Hello';
print_r($arr);
$arr['h']='hello';
$arr['w']='world';
$arr =array('h'=>'hello','w'=>'world')
8.
require 'lib.php';//依赖,文件不存在报错
require_once 'lib.php';//只引用一次
include 'lib.php';//包含,文件不存在给出警告
9.声明类
namespace jk;//命名空间
class Man{
private $_age,$_name;
private static $NUM = 0;//静态变量
/**
* @param int $age 年龄
* @param string $name 名字
public funcation _construct($age,$name){
$this-> _age = $age;//this当前对象指针,self当前类指针,parent父类指针
$this-> _name = $name;
}//构造方法
public funcation sayHello(){}//成员方法
public static funcation say(){}//类方法
}
创建实例
$a=new Man();
$a->sayHello();//调用方法
Man::say();
$h = new\jk\Hello();//存在命名空间
10.类继承,重写方法
class Child extends Man{
publicfunction _construct($age,$name){
parent::_contruct($age,$name);
}
publicfunciton say(){//重写方法
//parent::say(); //保留父类方法
echo 'child';
}
}
11.常用库函数
time();//时间戳
date_default_timezone_set('Asia/Shanghai');//时区设置
date('Y-m-d H:i:s');//时间
date('Y-m-d H:i:s',time());//时间戳转换成时间
$obj =array('h'=>'Hello','w'=>'World');
echo json_encode($obj);//转换成json格式
$jsonStr ='{"h":"Hello","w":"World"}';
$obj =json_decode($jsonStr);//json字符串转换为php对象
$f = @fopen('data','w');//打开文件,@不输出警告
fwrite($f,'hello');//写入文件
fclose($f);
$f = @fopen('data','r');
while(!feof($)){//判断是否到达文件尾
$content =fgets($f);//只能读取一行
echo$content;
}
echofile_get_contents('data');//直接获取文件
die('结束页面');
12.获取get参数和post参数
if(isset($_GET['name'])&& $_GET['name']){}//isset()判断变量是否设置empty($name)判断变量是否赋值
13.获取文件
$file = $_FILES['file'];
$fileName = $file['name'];
move_uploaded_file($file['tmp_name'],$fileName);
14.
cookie和session
setcookie('name','cheng');
header('Location:a.php');//跳转
//a.php
echo $_COOKIE['name'];//获取cookie
session_start();//启用session
$_SESSION['name'] ='cheng';
echo session_id();//获取sessionid
echo$_SESSION['name'];//
session_destroy();//销毁session
15.sqlserver数据库
$serverName = "aliks.cn,5468"; //数据库服务器,端口号
$uid = "tt_db"; //数据库⽤户登录名
$pwd = "alibaba156"; //数据库⽤户登录密码
$connectionInfo = array("UID"=>$uid, "PWD"=>$pwd, "Database"=>"DBiSys",'charset' =>'GBK');
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if ($conn === false) {
echo "Could not connect.\n";
die(print_r(sqlsrv_errors(), true));
}
$tsql = "insert into tb_users(user_id,username,pass_word,email,phone,role) values (null,'$username','$password','$email','$phone','$role')";
//$tsql=iconv('UTF-8','GBK',$tsql);//查询前对SQL转码
//向数据库插入表单传来的值的sql
/* Prepare and execute the query. */
$stmt = sqlsrv_query($conn, $tsql, []);
if ($stmt) {
/* echo "Row successfully inserted.\n"; */
} else {
echo "Row insertion failed.\n";
die(print_r(sqlsrv_errors(), true));
}
/* Get the number of rows affected and display appropriate message.*/
$rows_affected = sqlsrv_rows_affected( $stmt);
if( $rows_affected === false)
{
echo "Error in calling sqlsrv_rows_affected.\n";
die( print_r( sqlsrv_errors(), true));
}
elseif( $rows_affected == -1)
{
echo "No information available.\n";
}
else
{
echo $rows_affected." rows were updated.\n";
}
/* Free statement and connection resources. */
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);