PHP学习笔记

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP学习笔记相关的知识,希望对你有一定的参考价值。

PHP
(personal homepage)是html内嵌式语言,是一种在服务器端执行的嵌入HTML文档的脚本语言。由zend公司维护。
为什么要安装web服务器?因为我们浏览器要取数据,从web服务器湖获取。httpwatch工具可以获取发送和接受的数据,有利于我们了解的更透彻。服务器除Appche还有微软iis服务器、lighttpd服务器(读ligty)等.

Appche服务器

Appche服务器跨所有平台。可以通过ssh软件远程控制服务器。这时候要使用命令行。管理appche可以使用命令行。cd:切换目录。appache启动以后,会占用一个端口,默认80端口监听。一台机器可以有1-65535号端口,在开发中,可以使用netstat -an来查看有哪些端口在监听。端口越少越安全。如果发现有异常端口监听,则可以关闭该端口。用netstat -anb发现是哪个程序在监听,从而关闭。一个端口只能被一个程序监听。自己电脑发送请求时也有端口,是随机分配的,包含在URL中,用完就释放了。

appche目录结构
bin目录用于存放常用命令
cgi-bin该目录存放Linux下常用命令
conf目录用来存放配置文件
error目录存放启动和关闭时的错误记录
htdocs目录用于存放站点文件(html)多个站点可以通过文件夹分类。
icons目录存放图标
logs目录记录appche相关日志
manual目录手册
modules目录appche模块appche以模块形式管理

虚拟主机的配置步骤

1.在httpd-conf中启用httpd-vhosts.conf文件 

2.在httpd-vhosts.conf文件中做配置

3.修改hosts文件(重新审视访问一个网页的真正流程)
详细说明访问网页的流程 
浏览器回车后发生的事
1.解析主机名
2.查询本地文件hosts(windows下),该文件里有一个IP地址,查询和域名的关系,查询不到,转到外网dns域名服务器查询IP和域名的关系,查到了会向appche发送http请求,appche拿到请求后要解析主机,解析web站点名称解析资源名称,取出一个资源文件,如果取到了,则返回该页面。

一个IP(多个端口)和多个域名绑定
方案一:通过端口来区分不同的站点

1.先开发好自己的网站

2.配置我们的httpd.conf文件 启用里面的virual hosts文件,即启动虚拟主机的配置

3.配置httpd-hosts.conf文件。

4 在hosts文件中添加IP和域名的对应关系

 添加一个新的域名与该IP绑定
1.开发新的网站

2.添加新的虚拟主机

3在httpd.conf中让appche监听81端口,appche可以同时监听多个端口

4在hosts文件中添加新的域名

方案二:通过servername端区分不同的域名

1.开发新网站

2.在httpd-vhosts.conf文件中添加配置文件,和方案一配置有所区别,要指定域名ServerName www.sth.com。

3.在hosts文件中添加IP和域名的对应关系,和方案一相同。

网站资源文件(包括php文件)和appche在同一台机器,叫应用服务器,浏览器在另一台机器。数据库一般不在应用服务器,在专门数据库服务器上。

appche和PHP需要整合,PHP调用过程如下
浏览器回车,解析主机名例如sohu,查询和主机名对应的IP,查不到就到外网dns查询,查到了,拿到IP后向appche发送http请求,appche解析主机(appche管理多个域名),取出站点/目录,解析出资源名(网站的具体哪一页),将请求文件返回,PHP代码在appche已经执行完了,浏览器拿到的是服务器执行完后的代码,再解析后显示出来。
PHP代码修改了不需要重启appche。

PHP基本语法
<?php ?>和HTML可以相互嵌套。
注释:/**/多行,//单行 ,#Unix风格。

PHP基本语法、变量,常量,数据类型
1 php中定义一个变量要以$符号开头,变量的数据类型不是固定的,是根据运行时上下文确定的。所以PHP是弱数据类型编程语言。

2.PHP区分大小写。
一个有效的变量由字母或下划线开头
基本数据类型:整型,浮点型,布尔型,字符串型
复合数据类型:数组,对象
特殊数据类型:null 资源类型
PHP中,一个整数一般占四个字节,一个字节占8bit,最高位表示符号位,0表示正数,1表示负数PHP_INT_SIZE
一个整数最大是多少?用PHP_INT_MAX可查看,负整数和正整数最大值(绝对值)一样。如果整数范围超出最大范围,则自动类型变为float类型。

浮点数:精度最大14位,从左边开始计算,第一个非0的数开始计算精度

字符型:一个字符占用一个字节,理论上没有大小限制,只要不超过内存就可以
比较符==等于,===全等
逻辑异或Xor:两个有一个为true,但不同时为true ,为true

三元运算符
表达式1?表达式2:表达式3

字符串运算符
.:连接两个字符串(基本数据类型)

类型运算符
instanceof用于确定一个变量是否属于某一类型(只能判断对象类型)

三大流程控制语句
1.顺序控制
2.循环控制
3.条件控制
switch(表达式){
case 常量1:语句;
break;
case 常量2:语句;
break;
case 常量3:语句;
break;
case 常量n:语句;
break;
defual:语句;//可以没有
break;
}
break语句:结束当前的循环或switch语句,可以给一个数字表示退出到第几层。break 3;
break代表不玩游戏了,continue表示重新从第一关开始玩。
continue也可以带一个数字,表示从第几层开始走
常量:前面不需要$符号。用define()函数定义,而不能通过赋值语句;常量的值是标量[基本数据类型](string,integer,float,boolean),一旦定义,不能修改其值。,不希望某个值变化时使用常量,比如圆周率,税率。
常量的名称全部大写,用下划线间隔
定义常量两种方法:
define("TAX_RATE",0.08);
const TAX_RATE2=0.1;

函数:调用:require ‘funcs.php‘;
function 函数名(参数列表){
//函数体;
//return 语句,返回一个结果,可以没有。

}

PHP中页面相互调用
为了完成a.php中可以使用到function01.php中定义的函数,我们需要使用以下函数:
require()和require_once()函数。
include()和include_once()函数。
<?php
require(‘要引入的文件名‘);

$filePath="a.php";//通过变量引入
require $filePath;

require ‘要引入的文件名‘;
?>

执行一个函数时,会从一个新栈执行函数里的代码,然后返回到函数调用处,然后继续执行下面的代码。

require_once的优点:
前者遇到即包含文件,后者会判断是否已经包含了该文件,如果包含过来则不再包含。一可以节省资源,二可以避免重复定义的错误。

include和include_once
都可以把一个页面包含到另一个页面,用法同上

require和include区别
include遇到错误会继续执行,require会终止执行
推荐使用require_once,通常放在php页面最前面

如何理解函数的调用过程
按照函数执行的规则,只要一看到函数立刻开辟新栈,各个栈之间的变量是相互独立的(空间相互独立)。

函数参数和变量作用域:

1.函数的参数列表可以有多个参数
2.参数列表数据类型可以是多个类型,PHP支持的任意类型
3.函数的命名跟自定义变量一样,但是不区分大小写
4.一个自定义函数中定义的变量是局部的,函数外不生效
5.使用global全局变量的时候,可使用在函数外的变量
$a=12;
function abc3(){

global $a;//要在abc3()中使用外层$a
$a+=45;

}
abc3();
echo $a;
6.为了防止全局变量的混乱,可以使用unset($var)删除一个变量
例:$a=12;
function abc($a){

unset($a);//表示不再abc函数范围内,不使用$a,后面重新定义。
$a=45;
}
abc($a);
echo $a;

7.函数的默认值问题
可以给某些参数赋一个默认值
function abc($b,$a=2){

$res=$a+$b;
return $res;
}
$e=70;
echo abc($e).‘||‘;//72,$a默认为2
acho abc($e,90);//160
$f=80;
echo abc($e,$f);
8.PHP默认是值传递,如果需要地址传递,
function abc(&$b){//加地址符

$b=314;
}
abc($a);//$a的地址指向$b的地址
echo $a;//314位运算

二进制:逢二进一,使用二进制只有0和1两个数,易于电子方式实现,同时,通过0和1的组合,可以表示任何一个数。
1.二进制的最高位是符号位,0表示正数,1表示负数
2.正数的原码、反码和补码都一样
用二进制表示一个数,这个码就是源码
1.......>原码 00000000 00000000 00000000 00000001
负数的反码:原码符号位不变,其他为取反
-1......>原码 10000000 00000000 00000000 00000001
-1......>反码 11111111 11111111 11111111 11111110
负数的补码:它的反码加1
-1......>补码 11111111 11111111 11111111 11111111
0的反码、补码都是0
PHP没有无符号数,只要是数,最高位就是符号
在计算机运算的时候,都是以补码的方式来计算的
不管是正数还是负数,都要被转化成补码,然后进行计算

位运算符
$a & $b And(按位与) 将把$a和$b中都为1的位设为1.
$a | $b Or(按位或) 将把$a或者$b中为1的位设为1.
$a ^ $b Xor (按位异或) 将把$a和$b中不同的位设为1.
~$a Nor (按位取反) 将把$a中为0的位设为1,反之亦然.
$a << $b shift left 将把$a中的位向左移动$b次(每次移动都表示乘以2).
$a >> $b shift right 将把$a中的位向右移动$b次(每次移动都表示除以2).
前面四个叫位运算,后面两个是移位运算
~2=?
1.求出2的补码 00000000 00000000 00000010
2.取反 11111111 11111111 11111101(补码)-》原码
11111111 11111111 11111100 //补码减一得到反码
10000000 00000000 00000011 //-3
所以, ~2=-3
位移运算规则
算术右移:低位溢出,符号位不变,并用符号位补溢出的高位
算术左移:符号位不变,低位补0
$a=1>>2;
1.找到1的补码:00000000 00000000 000000000 00000001
00000000 00000000 000000000 00000000
$a=0;
$b=-1>>2;
1.找到-1的补码:10000000 00000000 00000000 00000001
11111111 11111111 11111111 11111110
11111111 11111111 11111111 11111111
2.算术右移两位 11111111 11111111 11111111 11111111
结果补码--原码 、
1111111 11111111 11111111 11111110(减一变反码)
10000000 00000000 000000000 00000001(原码)//-1
-1>>2=-1;

$c=1<<2;
1的补码:00000000 00000000 00000000 00000001
左移两位 00000000 00000000 00000000 00000100 //4

数组、排序、查找
为了知道数组中总共有多少个元素,可以使用系统函数count:count(数组名);

数组创建
数组是关键字和值的集合

.创建数组一
1.$arr[0]=123;
$arr[1]=90;
$arr[2]=8;
数组在内存中的存在方式:每个数组元素分配一个空间,$arr相当于楼层,每个元素代表一个房间
在PHP数组中,每个元素值的数据类型不限制
.创建数组二
$数组名=array(值1,值2,值3...);

下标又叫关键字,可以是数字,也可以自己指定(默认情况下,我们的元素的下标是从0开始给你编号)
$arr[‘logo‘]="beijing";
#arr[‘php‘]=123;
或者
$arr=array<"logo"=>"北京","php"=>123>

如果我们创建一个数组时,没有给某个元素指定下标,PHP就会自动用目前最大的那个下标值,加上1作为该元素的下标(关键字)
我们通常可以使用print_r来显示这个数组情况
var_dump($arr)可以更加详细的显示数组的信息
一维数组使用陷阱
$arr[bar]=‘hello world‘;这样使用危险,不要这样用
PHP数组相关函数
count函数:由于统计数组元素有多少个 count(数组名)。
is_array函数
print_r()和var_dump()函数。
explode函数:拆分字符串$arr=explode(" ",$str);//用空格拆分字符串$str.

 

 

以上是关于PHP学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

PHP学习笔记——入门篇——语法&变量

PHP学习笔记——入门篇——语法&变量

php学习笔记2016.1

PHP学习笔记-PHP与JavaScript的交互

php学习笔记细节部分。

PHP学习笔记