웹 서버의 역할: 클라이언트(PC/PAD/PHONE)로부터 요청을 받고, 필요한 데이터(파일/데이터베이스/기타 시스템)를 찾아 클라이언트에 다시 보냅니다.
웹 서버에는 두 가지 유형이 있습니다.
(1) 정적 웹 서버: 제공되는 콘텐츠는 언제든지 모든 사람에게 동일합니다.
静态Web内容:HTML/CSS/JS/Flash/GIF/音视频... 常见的静态Web服务器:Apache Httpd、MS IIS、NginX
(2) 동적 웹 서버: 제공되는 콘텐츠는 사람과 시간에 따라 변경될 수 있습니다.
动态Web内容: JSP = HTML + Java(静态Web服务器+Java解释器) PHP = HTML + PHP(静态Web服务器+PHP解释器) ASP.NET = HTML + C#(静态Web服务器+C#解释器) Node.js = HTML + Node
PHP: 개인 홈페이지 => PHP는 하이퍼텍스트 전처리기(Zend)입니다
LAMP 조합 = Linux + ApacheHttpd + MySQL + PHP
(1) 서버 측: 정적 웹 서버 다운로드 및 설치
c:/xampp/apache/bin/httpd.exe
(2) 서버 측: PHP 인터프리터 다운로드 및 설치, 웹 서버와 통합
C:/xampp/php/php.exe
(3) 서버 측: 정적/동적 웹 페이지 작성 및 저장 the web server
C:/xampp/htdocs
(4) 서버 측: 웹 서버를 시작하고 필요한 포트를 엽니다
ApacheHttpd服务器默认占用80/443端口
-------------------------- ------ -----------
(5) 클라이언트: 브라우저에 프로토콜, 주소, 포트를 입력하여 웹 서버
http://127.0.0.1:80
a = 1; b = 2; c = a + b;
변수: 값이 발생할 수 있습니다. 사람의 나이, 사용자의 비밀번호, 제품 가격 등 변경되는 금액입니다.
PHP中声明一个变量: $变量名 = 值; #等号读作“赋值” 输出一个变量的值: echo $变量名; #输出变量值时不加单引号
상수: PI, E와 같이 값이 변하지 않는 수량입니다.
声明一个常量: const 常量名 = 值; 输出一个常量值: echo 常量名;
변수 이름에는 숫자, 문자, 밑줄이 포함될 수 있지만 숫자로 시작할 수는 없습니다.
적법: $age, $age2, $_age_2, $emp_age, $empAge
불법: $2age, $user-Name, $ user Name
상수 이름에는 숫자, 문자, 밑줄이 포함될 수 있지만 숫자로 시작할 수는 없습니다. 상수 이름에는 모두 대문자를 사용하는 것이 관례입니다.
법적: AGE, AGE2, EMP_AGE
데이터 유형 PHP
PHP/JS는 "약한 유형의 언어"입니다. 변수를 만들 때 유형을 지정할 필요가 없습니다. 변수는 차례로 다른 유형의 값에 할당될 수 있습니다.
$i = 10; $i = 'Hello'; $i = true;
echo $ 변수 이름은 변수의 값을 출력하는 데만 사용할 수 있습니다.
var_dump($ 변수 이름)는 변수의 유형과 값을 출력하는 데 사용할 수 있습니다.
PHP의 데이터 유형 - 자세한 내용은 참조 매뉴얼 "언어 참조"를 확인하세요.
1) 4개의 스칼라/값/기본 유형
(1)int/integer:整数 -2147483648~2147483647 (2)float/double:小数 float和double完全一样 (3)string:字符串 (4)bool/boolean:布尔,只能取值为true / false / TRUE / FALSE
2) 2개의 복합 유형
(5)array:数组 (6)object:对象
3) 2개의 기타 유형
(7)null:空 (8)resource:资源
참고 :
(1) 정수 값이 int의 최대 범위(2147483647)를 초과하여 자동으로 flot 타입으로 변경됩니다.
(2) echo에 의해 bool의 true가 출력되면 '1'로 출력되고, false이면 출력됩니다. 에코하면 빈 문자열이 됩니다
( 3) 문자열은 작은 따옴표/큰 따옴표로 묶을 수 있습니다. 미묘한 차이: 작은 따옴표로 묶인 문자열에 변수 이름이 있으면 변수 이름으로 직접 출력됩니다. ; 큰따옴표 안에 변수 이름이 있는 경우 출력은 변수의 값이 됩니다. —— 큰따옴표 안에는 산술 기능이 없습니다: "$a+$b"
(4) 기호를 사용하여 두 문자열을 연결합니다
PHP의 연산자는 다음 범주로 나뉩니다.
(1) 산술 연산자: + - * / % ++ --
(2) 비교 연산자: > 3) 논리 연산자: && || !
(4) 비트 연산 기호: <<自/ % ++ () 1) -(자기 축소 1)
설명:
(1)+산술 연산에만 사용되며 문자열 연결은 사용하지 않습니다!
$n1 = $n1 + 1; $n1 ++; #运算速度更快! ++ $n1;
= < <= == != ===(全等于) !==(不全等)
说明: $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 => true7.逻辑:短路逻辑
与运算中的“短路”效果:
false && ? => false ?将不会被执行
或运算中的“短路”效果:
true || ? => true ?将不会被执行8.位运算符
数字按照二进制(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;9.赋值运算符
= += -= *= /= %=
$n = 30;
$n = $n + 5;
$n += 5; //效果等价于上一行
$n = $n - 5;
$n -= 5; //效果等价于上一行10.字符串拼接运算
. .=
$uname = 'tom';
$uname = $uname . '先生';
$uname .= '先生'; //效果等价于上一行单目运算符: $a++
双目运算符: $a + $b
三目运算符: $a ? $b : $c11.三目运算符
?:
语法: 表达式1 ? 表达式2 : 表达式3
含义:(如果...否则...)如果表达式1的值为true,则返回表达式2的值,否则返回表达式3的值
示例: $sex = 1;$result = $sex===0 ? '女' : '男' ; echo $result;로그인 후 복사12.程序 = 数据 + 算法
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,则退出循环,继续执行后面的语句
13.循环结构之二 —— do...while...
语法:
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次14.循环结构之三 —— for... —— 重点掌握
语法:
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/915.PHP中的数据类型:复合类型 —— array
表示一个学生的成绩: $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로그인 후 복사数据的说明性太差了!
16.PHP中数组分为两种类型:
(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>"; }로그인 후 복사18.PHP中的预定义数组 —— 难点!
预定义:由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로그인 후 복사19.函数基础认识 —— 掌握
Function:功能体/函数,用于封装一段需要反复执行/不易编写的代码 —— 饺子机。
声明一个函数:function 函数名( ){ //函数主体 }로그인 후 복사执行/调用一个函数:
函数名( );로그인 후 복사声明一个带参数的函数:
function 函数名(参数名1, 参数名2, ... ){ //函数主体 }로그인 후 복사执行/调用一个函数:
函数名( 值1, 值2, ... );로그인 후 복사声明函数时指定的参数其实就是变量名——形式参数;调用函数时给出指定的具体的值——实际参数。
声明一个带返回值的函数:
function 函数名( [参数名1, 参数名2, ...] ){ //函数主体 return 函数运算的结果值; //应该是整个函数中最后一句 }로그인 후 복사执行/调用一个有返回值函数:
$变量名 = 函数名( [值1, 值2, ...] );로그인 후 복사使用一个变量接收函数的返回值。
20.PHP预定义函数 —— 访问MySQL数据库必需的函数 ——重点&难点
提示:历史上,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 );로그인 후 복사21.面试题:$i++和 ++$i 的异同。
$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相关推荐: