The role of the Web server: receive requests from clients (PC/PAD/PHONE), search for required data (files/databases/other systems), Sent back to client.
Web servers are divided into two types:
(1) Static Web server: The content provided is the same for anyone at any time
静态Web内容:HTML/CSS/JS/Flash/GIF/音视频... 常见的静态Web服务器:Apache Httpd、MS IIS、NginX
(2) Dynamic Web server: The content provided is different People may change at different times
动态Web内容: JSP = HTML + Java(静态Web服务器+Java解释器) PHP = HTML + PHP(静态Web服务器+PHP解释器) ASP.NET = HTML + C#(静态Web服务器+C#解释器) Node.js = HTML + Node
PHP: Personal Home Page => PHP is Hypertext Preprocessor (Zend)
LAMP combination = Linux + ApacheHttpd + MySQL + PHP
(1) Server side: Download and install a static Web server
c:/xampp/apache/bin/httpd.exe
(2) Server side: Download and install PHP interpreter, integrated with the Web server
C:/xampp/php/php.exe
(3) Server side: Write static/dynamic web pages and save them on the Web server
C:/xampp/htdocs
(4) Server side: Start the Web server and open Required port
ApacheHttpd服务器默认占用80/443端口
---------------------------------------- ---
(5) Client: Enter the protocol, address, and port in the browser to access the Web server
http://127.0.0.1:80
a = 1; b = 2; c = a + b;
Variables: value Quantities that may change, such as a person's age, a user's password, and the price of an item.
PHP中声明一个变量: $变量名 = 值; #等号读作“赋值” 输出一个变量的值: echo $变量名; #输出变量值时不加单引号
Constant: A quantity whose value cannot change, such as PI and E.
声明一个常量: const 常量名 = 值; 输出一个常量值: echo 常量名;
The variable name can contain numbers, letters, and underscores, but it cannot start with a number
Legal: $age, $age2, $_age_2, $emp_age, $empAge
Illegal: $2 age, $user-Name, $user Name
Constant names can contain numbers, letters, and underscores, but cannot start with numbers; it is customary to use all uppercase characters for constant names
Legal: AGE, AGE2, EMP_AGE
Data types in PHP
PHP/JS is a "weakly typed language" - there is no need to specify a type when creating a variable, a Variables can be assigned values of different types one after another
$i = 10; $i = 'Hello'; $i = true;
echo $variable name; can only be used to output the value of the variable;
var_dump($variable name); can be used to output the type and value of the variable.
Data types in PHP - for details, please check the reference manual "Language Reference":
1) 4 scalar/value/basic types
(1)int/integer:整数 -2147483648~2147483647 (2)float/double:小数 float和double完全一样 (3)string:字符串 (4)bool/boolean:布尔,只能取值为true / false / TRUE / FALSE
2) 2 composite types
(5)array:数组 (6)object:对象
3) 2 other types
(7)null:空 (8)resource:资源
Note:
(1) The integer value exceeds the maximum range of int (2147483647) and automatically becomes a flat type
(2) If bool's true is output using echo, it will be output as '1', and if false is output using echo, it will be an empty string
(3) string can be enclosed in single quotes/double quotes; subtle difference: if there is a variable name in the single quoted string, Then the output is directly as the variable name; if there is a variable name in double quotes, the output is the value of the variable - there is no arithmetic capability in double quotes: "$a+$b"
(4) Two strings are spliced using .
Operators in PHP are divided into the following categories:
(1) Arithmetic operators: + - * / % + + --
(2) Comparison operators: > < ...
(3) Logical operators: && || !
(4) Bit operators: << > >
(5) Assignment operator: = ....
(6) Splicing operator: .
(7) Ternary operator: ?:
3. Arithmetic Operator
/ % ++(increment by 1) --(decrement by 1)
Instructions:
(1)+ is only used for arithmetic operations, no need to do string concatenation!
(2) When + acts on a string, implicit conversion will occur: try to parse out the numbers in the string, and parse as many as you can.
(3)+ Acts on Boolean, implicit conversion will occur: true is converted to 1, false is converted to 0.
(4)% represents the remainder operation/modulo operation. The result of 2018%4 is 2. It is generally used to determine whether a number can be divided by another number.
(5) Calculate a number based on the original + 1. There are three methods:
$n1 = $n1 + 1; $n1 ++; #运算速度更快! ++ $n1;
4. Comparison operator
= < <= == != ===(全等于) !==(不全等)
说明: $result = $score1 > $score2;
(1)比较运算的结果为 true 或 false 。
(2)默认情况下,用==比较的话,1和true是相等的;0和false和""是相等的 —— ==运算符会进行自动的“隐式转换”。
(3)若比较运算中不希望出现自动的隐式转换,只要类型不同直接判定为不等使用 ===
5.逻辑运算符
&&(并且/与) ||(或) !(取反/非)
$c = 50; $m = 80;
判定语文和数学是否都及格了: $c>=60 && $m>=60
对于&&运算:
true && true => true
false && true => false
true && false => false
false && false => false
判定语文和数学有一科及格吗: $c>=60 || $m>=60
对于||运算:
true || true => true
false || true => true
true || false => true
false || false => false
判定语文是否为不及格: !($c>=60)
对于!运算:
! true => false
! false => true
与运算中的“短路”效果:
false && ? => false ?将不会被执行
或运算中的“短路”效果:
true || ? => true ?将不会被执行
数字按照二进制(bit位)形式进行运算。
<<(按位左移) >>(按位右移)
面试题:现在有变量 $num = 5,计算出$num*16的最快方式是:
(a) $num = $num * 16;
(b) $num *= 16;
(c) $num *= 4;
(d) $num << 4;
(e) $num << 16;
结论:一个数字向左按位移动N位,相当于 原数*2^N;
一个数字向右按位移动N位,相当于 原数/2^N;
= += -= *= /= %=
$n = 30;
$n = $n + 5;
$n += 5; //效果等价于上一行
$n = $n - 5;
$n -= 5; //效果等价于上一行
. .=
$uname = 'tom';
$uname = $uname . '先生';
$uname .= '先生'; //效果等价于上一行
单目运算符: $a++
双目运算符: $a + $b
三目运算符: $a ? $b : $c
?:
语法: 表达式1 ? 表达式2 : 表达式3
含义:(如果...否则...)如果表达式1的值为true,则返回表达式2的值,否则返回表达式3的值
示例: $sex = 1;
$result = $sex===0 ? '女' : '男' ; echo $result;
1.算法的基本结构
(1)顺序执行
(2)选择执行
(3)循环执行
2.程序逻辑结构 —— 顺序执行
3.程序逻辑结构—— 选择/分支执行之一
收银台程序 V2.0: 若购物总金额满500,则打八折
选择执行的最基础代码:
if( 条件判定 ){ //条件判定结果为true时执行的代码 }
语句1;
if( 条件判定 ){
语句2;
}
语句3;
如果条件判定为true,执行顺序: 1=>2=>3
如果条件判定为false,执行顺序: 1=>3
收银台程序 V3.0: 若已付金额足够商品总价格,计算找零并输出;否则输出错误提示
"如果...否则..."逻辑的语法结构:
if( 条件判定 ){ //条件判定为true时执行的语句 }else { //条件判定为false时执行的语句 }
语句1;
if( 条件判定 ){
语句2;
}else {
语句3;
}
语句4;
条件判定为true,执行顺序: 1=>2=>4
条件判定为false,执行顺序: 1=>3=>4
关于"if...else....的嵌套问题"有两种编写方法:
(1) if( ){
}else { if(){ }else { } }
(2) if( ){
}else if( ){ }else if( ){ }else { }
if1 + else ifN + else*1
小结:
(1) if( ){ }
(2) if( ){ }else{ }
(3) if( ){ }else{ if(){}else{} }
(4) if( ){ }else if( ){ }... else{ }
4.程序逻辑结构—— 选择/分支执行之二
switch...case...break选择分支结构:在多个不同“情形下”进行“切换”。
语法: switch( 变量名 ){
case 值1: #if(变量名==值1) 语句1; case 值2: #if(变量名==值2) 语句2; .... default: #else.... 语句n; }
含义:若指定变量等于值1,则执行语句1;否则若等于值2,则执行语句2.... 否则执行语句n。
注意:默认情况下,switch若判定了某个相等条件则执行该条件以及后续所有条件中的执行语句 —— 必须配合break关键字使用。
5.程序逻辑结构 —— 循环结构之一
循环:多次执行相同或相似的代码
循环二要素: (1)循环体 (2)循环条件
第一种循环结构:
while( 循环条件判定 ){ //循环体 }
含义:执行条件判定,若为true,则执行一次循环体;再次执行条件判定.....直到某次执行完循环体,再去执行条件判定为false,则退出循环,继续执行后面的语句
语法:
do{ 循环主体; }while( 循环条件 );
while...先判定后执行 do..while..先执行再判定
$i=0;
while($i<5){
echo 'Hello'; $i++;
} $i=0;
do{
echo 'Hello'; $i++;
} while($i<5);
$i=10;
while($i<5){
echo 'Hello'; $i++;
} $i=10;
do{
echo 'Hello'; $i++;
} while($i<5);
while循环主体可能执行0~N次 do..while循环主体可能执行1~N次
语法:
for( 表达式1 ; 表达式2 ; 表达式3 ){ 循环主体; }
含义:首先执行且仅执行一次“表达式1”;
再执行“表达式2”的判定,若为true,执行一次循环主体; 再执行一次“表达式3”,再去执行“表达式2”的判定, 若为true继续执行一次循环主体..... 直到为false,退出循环。
总结:
“表达式1”在循环开始前执行一次——一般用于声明循环变量;
“表达式2”在每次主体执行前都执行一次——一般用于执行循环判定条件;
“表达式3”在每次主体执行后都执行一次——一般用于执行循环变量的增减。
$i = 0;
while( $i<5 ){
echo 'Hello';
$i++;
} for( $i=0; $i<5; $i++){
echo 'Hello';
}
while和for的功能一样!只是for更加紧凑!
for循环中的三个表达式都可以为空。
循环中使用break关键字: 打断当前循环,不再执行,跳出循环
for($i=1; $i<10; $i++){
if($i==5){
break;
}
echo "$i";
}
//1/2/3/4
while(true){ ...break;... } for( ; ; ){ ...break;... }
循环中使用continue关键字:跳过此次循环,继续下一次循环
for($i=1; $i<10; $i++){
if($i==5){
continue;
}
echo "$i";
}
//1/2/3/4/6/7/8/9
表示一个学生的成绩: $score = 90; #一个标量即可
表示100个学生的成绩:
$score1 = 85; $score2 = 98; $score3 = 77; ....
结论:一个标量类型的变量只能存储一个数据;若想一个变量中存储N个值,可以使用复合类型“数组(Array)”
创建一个数组的语法:
$变量名 = [ 值1, 值2, .... 值n ]; $变量名 = [ ];
获取数组中元素的个数/数组的长度:
echo count($变量名);
操作数组中的某个元素——使用元素的下标/索引(index):
$变量名[下标] = 值; #修改指定下标处的元素值 echo $变量名[下标]; #输出指定下标处的元素值
向数组中添加新元素:
$变量名[ ] = 值; #新的元素会自动获取新的下标
思考:创建一个数组,保存一个学子商城中用户的信息,编号、用户名、密码、注册时间、当前是否在线。
$user = [134773434, 'tom', '1232132', 123434434, 1];
0 1 2 3 4
数据的说明性太差了!
(1)索引数组(Indexed Array):每个元素的下标是数字
$arr = ['tom', 'mary', 'king']; $arr = [24, 35, 55, 28, 29]; 索引数组适用于“类型相同的多个数据”
(2)关联数组(Association Array):每个元素的下标是字符串
$user = ['uid' =>1234, 'uname'=>'tom', 'regTime'=>1232341343, 'upwd'=>'123234'];</p> <p>注意:关联数组每个元素的下标都是自定义的字符串!不能使用for循环进行遍历!</p> <h2>17.循环结构之四 —— foreach循环</h2> <p>语法: foreach只用于遍历数组(尤其是关联数组)</p> <pre class="brush:php;toolbar:false">foreach( $数组名 as $元素变量名 ){ //循环主体 } foreach( $数组名 as $下标变量名=>$元素变量名 ){ //循环主体 }
含义:对于数组中的每个元素,都看做是一个指定的变量,对每个这样的变量执行一次指定的循环体
示例: $ageList = [20, 23, 21, 25];
foreach( $ageList as $v){ echo "$v<br>"; } ================== $user = ['uid'=>101, 'uname'=>'tom']; foreach( $user as $v){ echo "$v<br>"; }
预定义:由PHP解释器自己创建的,程序员不需要声明可以直接使用的。PHP预定义了如下的数组变量:
$_GET
$_POST
$_COOKIE
$_FILES
$_REQUEST:保存着客户端提交给服务器的“请求”数据
$_SESSION
上述变量默认都是 array(0){ }
Web项目中,客户端(浏览器)如何给服务器传数据:
http://127.0.0.1/login.php?uname=tom&upwd=123
PHP服务器会自动把?后面的数据存储到$_REQUEST数组中:
$_REQUEST['uname'] = 'tom'; $_REQUEST['upwd'] = '123';
程序员如何读取客户端提交的数据:
echo $_REQUEST['uname']; //tom echo $_REQUEST['upwd']; //123
Function:功能体/函数,用于封装一段需要反复执行/不易编写的代码 —— 饺子机。
声明一个函数:
function 函数名( ){ //函数主体 }
执行/调用一个函数:
函数名( );
声明一个带参数的函数:
function 函数名(参数名1, 参数名2, ... ){ //函数主体 }
执行/调用一个函数:
函数名( 值1, 值2, ... );
声明函数时指定的参数其实就是变量名——形式参数;调用函数时给出指定的具体的值——实际参数。
声明一个带返回值的函数:
function 函数名( [参数名1, 参数名2, ...] ){ //函数主体 return 函数运算的结果值; //应该是整个函数中最后一句 }
执行/调用一个有返回值函数:
$变量名 = 函数名( [值1, 值2, ...] );
使用一个变量接收函数的返回值。
提示:历史上,PHP官方提供了两套访问MySQL服务器的函数:
mysql_xxxx( ) 性能不够优秀 mysqli_xxxx( ) Improved:改进提升版
使用MySQLI函数库访问数据库服务器的步骤(与管理员从命令行中访问数据库的步骤一样):
(1)连接到数据库服务器
$conn = mysqli_connect(...);
(2)提交SQL语句给服务器执行
$sql = "INSERT/DELETE/UPDATE/SELECT..."; $result = mysqli_query($conn, $sql);
(3)查看执行结果
if($result===false){ //执行失败 }else{ //执行成功 }
(4)关闭到数据库服务器的连接(可以省略)
mysqli_close( $conn );
$i++:先取值再自加
++$i:先自加再取值
$i = 10;
$j = $i++; #先取出$i的值(10),赋值给$j;然后$i自加1
echo $i, $j; #11, 10
$i = 10;
$j = ++$i; #先对$i自加1,变为11;再取其值赋给$j(11)
echo $i, $j; #11, 11
相关推荐: