PHP从入门到精通(一)
(一)PHP简介和基本知识
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
首先,我们来了解一些关于PHP的一些基础知识
【静态网站与动态网站】
1、静态网站:(纯HTML页面,页面固定,不会变化),没有与后台服务器的交互,没有数据库的支持;
2、动态网站:(可以根据交互情况动态显示不同的内容),需要与后台服务器进行数据交互,需要数据库的支持。
【支持动态网站的语言】
Java----->jsp
PHP----->php
asp----->asp
【常见服务器】
Apache:阿帕奇公司旗下服务器,用于解析PHP类网站;
Tomcat:阿帕奇公司旗下的另一款服务器,用于解析JS类网站;
【常见的数据库】
MySQL、Access、Oracle、SQLServer……
我们PHP一般配合MySQL使用。当然PHP可以连接几乎所有主流数据库。
【B/S C/S】
B/S结构:(Browser/Server,浏览器/服务器模式)。用户只需要通过浏览器即可访问的网站,大部分操作功能集中在后台服务器。
C/S结构:Client/Server结构是客户端和服务器结构。用户需要安装客户端。客户端可以分担一定的操作功能。
【常见的开发PHP集成环境】
wamp:Windows+Apache+MySQL+php;
lamp:linux+Apache+MySQL+php;
PHPstudy:
PHPserver:
PHP开发首选Linux系统,但是PHP能够友好的兼容支持各种操作系统(Windows,Linux,macOs、Unix……);
PHP中的入门知识
【PHP标记的种类】
PHP文件中,如果使用php语法,必须将PHP语言放到标记当中。PHP支持如下四种标记方式:
①<?php?>这是PHP的官方推荐写法,也就是我们主要采用的写法!这种标记可以插入到HTML文档的任意位置;
>>>注!!!:如果页面中只有PHP语言,推荐省略结束标记?>
原因:空格部分……
②<script language="php"></script>长标记写法:总是可以使用,但是,我们不推荐。
③<??>短标记写法。默认不开启,需要修改php.ini文件中“short_open_tag=On”打开。但是,由于与HTML标签冲突,不推荐使用。
④<% %>ASP风格,默认不开启,需要修改php.ini文件的"asp-tag = On"打开,但是和ASP,JSP中的标记冲突,不推荐
【PHP中的指令分隔符;】
1、PHP中的"结构定义语句"(分支、循环、类、函数等带{}的),不需要使用分号结尾。
2、PHP中的"功能执行语句",(不用{}结尾的),必须使用分号结尾。
3、特例:最后结束标签?>前的最后一条语句,可以省略分号。
//单行注释
/*
* 多行注释
*/
/**
* 文档注释
*/
#脚本注释
【PHP中的变量】
①PHP中的变量,声明与使用,必须使用$开头。
②PHP是一种弱类型语言,变量其实并不需要声明,可以直接给变量赋任何类型的值;
③PHP中可以使用连等同时声明多个变量。而不能使用逗号分隔。
eg:$num1=$num2=$num3=5;
④常用变量函数:
unset():删除并释放变量;
isset():检测变量是否设置;
empty():检测变量是否为空(未设置或值为Null都算空);
⑤变量的命名:只能有字母数字下划线组成,开头不能是数字。而且,PHP中变量区分大小写!!
$name,$Nnme,$NAME都是不同变量;
但是,PHP的内置函数不区分大小写!echo EcHo都是有效的。
【PHP中的变量类型】
①PHP支持8种数据类型:
4种标量类型:布尔型Boolean 整形integer 浮点型float/double 字符串string
2种复合类型:数组Array 对象Object
2种特殊类型:资源Resource 空null。
②整形的范围从-2^32~-2^32-1,超出这个范围,自动转为浮点型。
【PHP中算false的情况!!!】
1、Boolean false
2、整形 0
3、浮点型0.0
4、字符串"" "0"("0.0" "0000"都算对)
5、空数组
6、空对象只在PHP4版本算false,其他版本都算true。
7、Null和尚未定义的变量
8、所有资源都算对!!(除PHP4,所有对象也算对)
【PHP中字符串的声明】
PHP支持3种方式声明字符串:
①'':如不需要解析变量,单引号执行效率更快(细微差别)
②"":习惯上比较常用
③<<<(定界符):$str=<<<s(定界标识符)
//定界标识符声明字符串,通过<<<(定界标识符)开始
//遇到定界标识符结束!!!前面连一个空格都不能有!
//定界标识符可以是任意字母,只需要保持开始和结束一致即可。
s;
④三种方式的区别:
a:定界符功能默认与双引号相同。定界符中可放双引号。
b:单引号中,不能解析变量。而双引号、定界符都可以解析变量。
注意:双引号中解析变量时,变量名应使用空格分隔,推荐使用{}包起来。
c:各引号中可互相套用,但是不能放与自身相同的引号。
d:单引号中,不能使用转义字符(但是除了'本身,转义字符\本身),双引号中,可以使用转义字符。
【PHP中的伪类型】
伪类型:并不是一种真实存在的数据类型,它的存在仅仅是用来告诉程序员可以是那些、那种数据类型。常用于撰写帮助文档时使用:
mixed:代表参数可以是多种数据类型;
Number:代表参数可以是integer或者float;
callback:代表参数可以是一个回调函数;
【PHP中的数据类型转换】
1.自动类型转换:表示运算的时候,Boolean、Null、String等类型,会自动转为integer或float类型。
Null——>0
true——>1
false——>0
string——>转非数值前的数字,没有转为0
2.强制类型转换:根据我们的需要,强制将变量转换为其他类型的变量;
①使用()声明新类型强转;
②使用settype();函数强转;
bool settype(mixed var,String type);第一个参数表示任何类型的变量;第二个参数表示字符串类型的数据类型,返回Boolean结果。
③两种方式区别:
第①种,是将转换后的结果,赋给新变量;
第②种,直接修改了原变量的数据类型;
$新变量=(新类型)$原变量;
//新类型,可以使用全拼,也可以使用缩写
(int),(integer) - 转换成整型
(bool),(boolean) - 转换成布尔型
(float),(double),(real) - 转换成浮点型
(string) - 转换成字符串
(array) - 转换成数组
(object) - 转换成对象
bool settype(mixed var,String type)
【PHP判断变量类型的测试函数】
is_bool():判断是否是布尔型
is_int()、is_integer()和is_long():判断是否为整型。
is_float()、is_double()和is_real():判断是否为浮点型
is_string():判断是否为字符串
is_array():判断是否为数组
is_object():判断是否为对象
is_resource():判断是否为资源类型
is_null():判断是否为null
is_scalar():判断是否为标量
is_numeric():判断是否是任何类型的数字和数字字符串
is_callable():判断是否是有效的函数名
【PHP中的输出语句】
echo "……";输出变量的值。
var_dump(num);输出变量的数据类型和值[和一些其他信息]。
print_r();专用于打印数组。
【PHP中常量的定义和使用】
1、常量的定义:bool define(string 常量名,mixed任何类型的常量值[,bool 是否区分大小写]);
2、常量的注意事项:
①常量定义只能使用define()函数;
②常量名,原则上要求必须使用大写声明。而且必须不能使用$声明($只能是变量);
③常量声明以后,默认全局范围有效,没有作用域之说。
④常量不但不能改,而且不能删!unset,settype等函数均无效。
⑤常量默认区分大小写,但是可以在声明常量时,将define函数的第三个参数改为true,即可改为不区分大小写。
⑥常量必须使用define()定义后才能使用。如果使用未声明的常量,则默认转为常量字符串。但是,会报警告!
var_dump(NUM);————>String "num"
⑦常量的值,只能是标量Boolean、String、integer、float。
3、可以使用constant("")读取常量值,没卵用!
可以使用get_defined_constants(),获取已定义的常量!包含系统自定义的N多个常量。
代码示例:
<?php header ("Content-Type:text/html; charset=utf-8");
$num=1;
$num="哈哈";
echo $num;
$num1=$num2=$num3=5;
echo $num1;
echo isset($num1);
var_dump(empty($num1));
$isTrue="";
if($isTrue){
echo "这是true";
}else{
echo "这是false";
} echo "<br/><br/><br/>"; $str1='hahah{$num1}hahah\'ah1 ';
echo $str1;
$str2="hahahhah{$num1}ahah2";
echo $str2;
$str3=<<<str
123
456
789
str;
echo $str3; function func1(){
define("NUM",12,true);
}
func1();
echo "<pre>";
print_r(get_defined_constants());
echo "</pre>";
#var_dump(num);
PHP中的运算符
【运算符】
1、算术运算符:
+,-,*,/,%,++,--
2、赋值运算符:
= += -= *= /= %= .=(连接字符串)
3、比较运算符:
< > <= >= == === <>或!= !==
==:要求值相等,而不需要数据类型相等;
===:要求之和数据类型都相等;
!=:只比较值,值相等为false;
!==:比较值和类型,都相等为false;
4、逻辑运算符:
and/&& or/|| not/! xor(异或)
&&和||进行运算的时候会发生短路,当左侧判断出结果的时候,右侧不再执行(&&左侧为假时,结果为假;||左侧为真时,结果为真)
xor:逻辑异或。两边只有一个对的结果为true;两边都对或者都错结果为false。
5、位运算符:将10进制转为2进制,然后在进行运算。
&:按位与。转成2进制后,两个都为1,结果才为1。eg:12&12——>1100&1100=1100=>12;
|:按位或。转成二进制之后,有一个为1,就是1;
^:按位异或。转成2进制后,两个不相同同为1;都为0或都为1,结果为0;
~:按位取反转成2进制后,所有位数取反,再转为10进制数输出(!!!!!规律:即~n——>-(n+1))
<<:按位左移:转成二进制后,左移几位,右边空余位数补0。(!!!!规律:num<<n——>num*2^n)
>>:按位右移:转成二进制后,右移几位,左边空余位数补0。(!!!!规律:num>>n——>num/2^n)
6、其他运算符
?::表达式1?表达式2:表达式3:表达式1成立执行表达式2,否则执行3。
``:调用系统都是环境下的命令行并执行,但是由于安全性以及跨平台性,我们并不提倡使用:eg:`ipconfig`
@:错误信息控制符。可以临时屏蔽掉一些小的错误信息。但是不提倡使用!
=>:数组下标指向
->:对象
【可变变量】
在一个 变量名前边,再加一个$符号。即可将第一个变量的值,作为新变量的名字。
$hello="hello1";
$$hello="world";//$hello1
$$$hello="liu";//$world
&:取址符号。变量名前加&符号,取到当前变量的引用地址(变量在内存中的地址)。
$num2=&$num1;//取出num1的地址给num2,相当于我们说的引用数据类型。num2和num1的值将同时改变。
代码示例:
PHP中,利用代码实现a和b的交换
$a=10;
$b=8;
#智障级
$c=$a;
$a=$b;
$b=$c; #凡人级
$a=$a+$b;
$b=$a-$b;
$a=$a-$b; #神经级
$a=$a^$b;
$b=$a^$b;//$a^$b^$b
$a=$a^$b;//$a^$b^$a
/*
* 分析:
* 8-------00001000
* 10------00001010
* ^-------00000010
*/ echo $a.",".$b;
PHP中分支和循环结构
【PHP中的分支结构】
if中的判断条件:详见上面讲到的判断条件;
elseif:PHP中elseif语句可以连写,也可以分开写;
switch:PHP中的switch结构,采用松散比较(==)判断,与Js不同!!!!!
>>>注意:php中,continue可以用于switch结构,作用与break相同!
PHP中continue和break可以后接数字,表示跳过几层循环或switch。例如:break 3代表终止3曾循环
do-while:循环最后,必须加;分号。
>>>eg:do{}while();
具体结构可大致参阅博主之前分享的Js中的循环。
【流程控制语句】
1、break:终止本层循环;break后面可以接数字,表示终止几层循环 break 3;终止3层循环
2、continue:跳过本次循环;continue后面可以接数字,表示跳过几层循环
3、return:结束函数,并返回值(如果有),但是只有函数中能用,脚本中不建议使用return
4、exit(mixed 结束语)/die(mixed 结束语)函数:直接结束当前的PHP脚本!如果有参数传入,则先打印出结束语,然后结束当前脚本。
代码示例:
//利用分支循环结构实现表格并填入指定数字。
echo "<table style='width: 500px; border: 1; border-collapse: collapse; '>";
for($i=0;$i<10;$i++){
if($i%2!=0){
echo "<tr bgcolor='red'>";
}else{
echo "<tr bgcolor='green'>";
}
for($j=0;$j<10;$j++){
echo "<td style='border: 1px solid black';>";
echo $i.$j;
echo "</td>";
}
echo "</tr>";
}
echo "</table>";
PHP从入门到精通(一)的更多相关文章
- <程序员从入门到精通> -- How
定位 自己才是职业生涯的管理者,想清楚自己的发展路径: 远期的理想是什么?近期的规划是什么?今日的任务和功课又是什么? 今日之任务或功课哪些有助于近期之规划的实现,而近期之规划是否有利于远期之理想? ...
- 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目 目录索引
索引 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目(1)搭建MVC环境 注册区域 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目(2)创建 ...
- ASP.NET MVC4入门到精通系列目录汇总
序言 最近公司在招.NET程序员,我发现好多来公司面试的.NET程序员居然都没有 ASP.NET MVC项目经验,其中包括一些工作4.5年了,甚至8年10年的,许多人给我的感觉是:工作了4.5年,We ...
- Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引
因为内容比较多,所以每篇讲解一些内容,最后会放出全部代码,可以参考.操作中总会遇到各式各样的问题,个人对部分问题的研究在最后一篇 问题研究 里.欢迎大家探讨学习. 代码都经过个人测试,但仍可能有各种未 ...
- 1、ASP.NET MVC入门到精通——新语法
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 在学习ASP.NET MVC之前,有必要先了解一下C#3.0所带来的新的语法特性,这一点尤为重要,因为在MVC项目中我们利用C#3.0的新特 ...
- 5、ASP.NET MVC入门到精通——NHibernate代码映射
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 上一篇NHibernate学习笔记—使用 NHibernate构建一个ASP.NET MVC应用程序 使用的是xml进行orm映射,那么这一 ...
- 6、ASP.NET MVC入门到精通——ASP.Net的两种开发方式
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 目前,ASP.NET中两种主流的开发方式是:ASP.NET Webform和ASP.NET MVC.从下图可以看到ASP.NET WebFo ...
- 7、ASP.NET MVC入门到精通——第一个ASP.NET MVC程序
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 开发流程 新建Controller 创建Action 根据Action创建View 在Action获取数据并生产ActionResult传递 ...
- 8、ASP.NET MVC入门到精通——View(视图)
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 View视图职责是向用户提供界面.负责根据提供的模型数据,生成准备提供给用户的格式界面. 支持多种视图引擎(Razor和ASPX视图引擎是官 ...
- 9、ASP.NET MVC入门到精通——Controller(控制器)
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 Controller主要负责响应用户的输入.主要关注的是应用程序流,输入数据的处理,以及对相关视图(View)输出数据的提供. 继承自:Sy ...
随机推荐
- HTML语言和CSS开发
第一张 HTML基础1.HTML:超文本标记语言(它除了文字,还能写图片.视频.音频.交互),他不是编程语言,它是标记语言2. <!DOCTYPE html> HTML5版本申明 < ...
- MySQL 1130 - Host 127.0.0.1 is not allowed to connect to this MySQL server
在开发中为了让开发更方便,在本地配置环境,希望可以直接访问服务器上的MySQL数据库,更方便的管理数据库, 需要在本地远程连接linux服务器的本地数据库,直接用数据库管理工具连接出现如下报错1130 ...
- mybatis使用<choose> <when>
一.需求 后台使用orcale数据库,mybatis做持久层,前台搜索功能,根据类型搜索,但是数据库中没有类型字段, 所以需要在where条件语句中进行判断,当type == x1 时和type == ...
- mysql中case的一个例子
最近遇到一个问题: year amount num 1991 1 1.1 1991 2 1.2 1991 3 1.3 1992 1 2.1 1992 2 2.2 1992 3 3.3 把上面表格的数据 ...
- 基于tomcat插件的maven多模块工程热部署(附插件源码)
内容属原创,转载请注明出处 写在前面的话 最近一直比较纠结,归根结底在于工程的模块化拆分.以前也干过这事,但是一直对以前的结果不满意,这会重操旧业,希望搞出个自己满意的结果. 之前有什么不满意的呢? ...
- 写给spring版本的那些事儿
1.远程调用rmi协议 Exception in thread "main" java.rmi.UnmarshalException: error unmarshalling re ...
- SDE ST_Geometry SQL st_intersects查询很慢的解决方法
环境:服务端 SDE 10.0 oracle 11.2,客户端 PLSQL 11,oracle 11.2 为了调试方便,以下测试都是把sql提取出来在PLSQL上做 需求是已知一个多边形的点坐标,要在 ...
- php-kafka
1.环境依赖 The extension support both PHP 5 and PHP 7. The extension requires » librdkafka >= 0.8 for ...
- PHP开发小技巧②—实现二维数组根据key进行排序
在PHP中内置了很多对数组进行处理的函数,有很多时候我们直接使用其内置函数就能达到我们的需求,得到我们所想要的结果:但是,有的时候我们却不能通过使用内置函数实现我们的要求,这就需要我们自己去编写算法来 ...
- nginx跟apache访问方法
ifconfig 在浏览器中输入ip即可访问 centos安装nginx环境 1:进入 cd /usr/local/src //下载文件放到这个目录中 2:wget http://nginx.org ...