一、前提是我在Linux服务器上已经安装了PHP
这句代码非常神奇,一句话能变成一个网页。是我们PHP入门的第一段代码。
<?php
phpinfo();
?>
刚刚我们看到这个代码已然生成了一个网页。不明白其中的意思,现在我一点一点跟大家解释。
<?php
//这句话是说明从此处【尖括号、问号、PHP】这5个字符开始,往下的部份是PHP代码。
?>
遇到上面的【问号、尖括号】说明PHP代码写完了。再之后的部份,跟我PHP没有关系啦。现在大家看会了?请问:phpinfo() 后面还接了一个分号(;),并且在phpinfo()的上一行和后一行,还有两个回车符。请问这是什么意思呢?
现在我告诉你答案:
phpinfo是一个函数(功能),这个函数(功能)会显示一个当前电脑(服务器)的详细的PHP信息。在后面会专门为大家讲解phpinfo()这个函数。这个函数必须要大家记住!
电脑是一个很笨的东西。他需要我们人为的告诉他,代码写完了。我们用分号(;)来告诉他代码写完了。因此,只要我们写完一段代码,就需要在后面加分号(;)。而前后两行的回车空行,是为了让代码更加好看,避免叠在一起,让人看着不舒服。其实,中间你有多少个回车空行都没有关系的,保证好看就行了。PHP的语法解释器(PHP最核心的部份)不会处理这些空行的。
注意事项:
php的代码部份全部要用半角的英文、很多人容易写成全角的英文和符号造成PHP代码报错。
PHP代码的最后一行可以加也可不加分号。由于很多学习者特别是初学者经常犯一个毛病:写完一行代码不加分号。因此,容易报错。我们通常在公司里面规定:一行代码写完,就必须要加分号。PHP还可以有简洁声明模式,我们在这个阶段以代码练习为主。关于环境配置问题,暂时不建议学习。在后面的章节中,我们会专门进行讲解。以上,非常容易在实际开发中不小心造成错误。
我们在写文件index.php这个文件命名的时候,只用英文半脚(a-zA-Z0-9_-)这些字符来命名文件。文件命名不要用中文,不要用特殊附号,不要中间加空格,严格区分大小。
二、读过初中你就会变量
大家在读初中的时候呀。老师经常会这么教大家。请问,李磊和韩梅梅同学,假如:那么x + y 等于多少呢?大家会义无反顾的回答。x + y 等于11。
x = 5
y = 6
接下来我们看下面的初中的数学知识,请问x + y 的结果是多少?我估计大家也会义无反顾的回答:x + y 的结果为14。
x = 5
y = 6
x = 8
这就是变量!变量的几个特点:1.x = 5 将右边值5,赋值给左边的x
2.第二段x = 8,最后x + y 的结果等于14,说明x在从上到下的运算(执行)中,可以被重新赋值。
我们在PHP中的变量也是如此。不过有几个特点:
1.必须要以$开始。如变量x必须要写成$x
2.变量的首字母不能以数字开始
3.变量的名字区分大小写
4.变量不要用特殊符号、中文,_不算特殊符号
5.变量命名要有意义(别写xxx,aaa,ccc这种 变量名)
错误举列:
错误:变量以数字开始
<?php
$123 = 345;
?>
错误:变量中有特殊字符,中文<?php
//$a*d = 345;
//$中国 = 123;
?>
错误:变量命名没有意义aaa容易数错,也没有含意<?php
$aaaaaaa = 345;
?>
错误:变量严格区分大小写 $dog 和 $Dog是PHP学院的变量,尝试将$dog的值改为8.结果D写成了大写。<?php
$dog = 5;
//重新修改$dog的值,将$dog改为8
$Dog = 8;
?>
正确举例:
正确:变量不能以数字开始,但是数字可以夹在变量名中间和结尾
<?php//变量不能以数字开始,但是数字可以夹在变量名中间和结尾
$iphone6 = 5880;$iphone6plus = 6088;
$mony = $iphone6 + $iphone6plus;
echo $mony;?>
正确:变量不能有特殊符号,但是_(下划线不算特殊符号)
<?php
$_cup = 123;
?>
注:你会发现代码是从上向下执行的。
$ 叫作美元符,英文单词:dollar。PHP的变量必须以美元符开始。说明搞PHP有“钱”途。
三、echo 显示命令
echo 是在PHP里面最常用的一个输出、显示功能的命令。我们可以让他显示任何可见的字符。
<?php
echo 123;
?>
四、php注释的学习
注释的功能很强大,所谓注释,汉语解释可以为:注解。更为准确一些。因为代码是英文的、并且代码很长,时间长了人会忘。所以我们会加上注释。
注释的功能有很多:
1.对重点进行标注
2.时间长了容易忘快速回忆,方便查找
3.让其他人看的时候快速看懂
4.还可以生成文档,代码写完相关的文档就写完了,提高工作效率
5.注释、空行、回车之后的代码看起来更优美
6.注释可用来排错。不确定代码中哪一块写错了,可以将一大段注释,确定错误区间
7.注释中间的部份的内容,电脑不会执行它
先给大家看看我们觉得优美的代码,整齐、规范、说明清楚、一看就懂。(不需要理解代码的含义):
再看看我们眼中觉得丑陋的代码,对齐丑陋不说,并且没有功能说明(不需要理解代码的含义):
我们了解了注释的好处,接下来我们来说PHP的注释,注释分别:
单行注释(只注释一行)多行注释(注释多行)
单行注释
// 表示单行注释
# #号也表示单行注释,用的比较少
/*
多行注释 这里是注释区域代码
*/
单行注释举例:
<?php
//声明一部iphone6手机的价格变量
$iphone6_price = 6088;
注:通过上例我们知道,注释通常写代码上面。
多行注释举例:
<?php
/*
作者:PHP中文网
时间:2048.12.23
功能:这是一个假的多行注释的例子
*/
/*
声明一个爱情变量
$love 是指爱情
爱情是一个变量,因为人的爱总是在发生变化
所以,爱情变量的值为250
*/
$love = 250;
?>
五、php整型就是整数
我一直在讲,不要被名词的含义所吓唬住。到底什么是整型呀?所谓整型,就是大家数学中所学的整数。
整型——整数也,英文称之:integer。英文简写:int
整型分为:1.10进制
<?php
//为了方便大家记忆和前期学习,英文不好的朋友也可用拼音来声明变量。以后再用英文来声明变量也无所谓
//声明变量 整数,英文 int
//$int = 1000;
$zhengshu = 1000;
echo $zhengshu;
?>

2.8进制 (了解,基本不用)
<?php
//8进制的取值范围最大为0-7,即0,1,2,3,4,5,6,7
$bajingzhi = 033145;
echo $bajingzhi;
?>

3.16进制(了解,基本不用)
<?php
//16进制的取值范围最大为0-f,即0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
$shiliu = 0x6ff;
echo $shiliu;
?>

整型(整数)在计算机里面是有最大值和最小值范围的。
六、php数据类型之布尔(其实他就是中国易经)
布尔类型就是:真和假。在英文把真和假翻译过来就是:
true(真)
false(假)
因此,我们在PHP代码里面可以这样声明。
<?php
//声明一个变量(拼音)为布尔
$buer = true;
//导明一个变量(英文)
$bool = false;
?>
七、php数据类型之字符串
字符串就是所有我们可见和不可见的字符,就是我们日常当中说的话,就是我想说:“小明好帅”或者“凤姐,我爱你!”。字符串,就是我想表达的一切让人看到的字符。
例如可以看到的字符:我愿变成童话你,你爱的那个王子,有房有车有票子。 <html><title></title></html> ^@@@#@ my name is xiaoshenyang
以上可以见到的文字,HTML标签、特殊字符和英文等等,我们都认为是字符串。
在PHP语言中声明字符串有三种方式:
1.用单引号声明
2.用双引号声明
3.用字界符声明(需要输入非常大段的字符串时使用)
1.单引号声明
用英文半脚的单引号,将字符串包起来
<?php
//声明字符串变量$zhifu
$zhifu = '曾经有操蛋的爱情摆在我面前,我珍惜了。当我得到的时候才感到后悔莫及。如果非要在这段爱情前面加上一段三个字,我愿意说三个字:滚犊子';
//你可以放XAMPP指定的目录下,新建一个文件叫str.php。然后访问一下http://127.0.0.1/str.php试试。会不会显示这句话。
echo $zhifu;
?>
2.双引号声明字符串
在字符串两边加双引号。
<?php
//声明字符串变量$str
$str = "如果非要在滚犊子前面加上一个时间的话我愿意是马上。";
echo $str;
?>

3.字界符声明
1).在变量后面的等号写三个小于号(<<<)。
2).然后在<<<后面写上字符(建议英文大写字符)。如下例中的:ABC
3).然后换行写上任意想写的字符
4).写完后,顶行。在行最开始处,再写上<<<后面的字符和分号。如下例中的:ABC;
<?php
$dingjie = <<<ABC
如果
非要在这个滚犊子
前
面<br />
加上一段
<i>距离的话</i>
我想说:<h1>思想有多远,你就跟我滚多远</h1>
ABC;
echo $dingjie;
?>

那双引号和单引号有什么区别呢?
【重要知识点】PHP面试题中,高概率面试题(建议背诵并实验三遍以上)
1.双引号解析变量,但是单引号不解析变量。
2.在双引号里面插入变量,变量后面如果有英文或中文字符,它会把这个字符和变量拼接起来,视为一整个变量。一定要在变 量后面接上特殊字符,例如空格等分开。
3.如果在双引号里面插变量的时候,后面不想有空格,可以拿大括号将变量包起来。
4.双引号解析转义字符,单引号不解析转义字符。但,单引号能解析\' 和\
5.单引号效率高于双引号,尽可能使用单引号
6.双号和单引号可以互插!!!双引号当中插入单引号,单引号当中插入变量,这个变量会被解析。
7.神奇的字符串拼接胶水——(.)点,用来拼接字符串。
8.我们将定界符声明字符串视为双引号一样的功能来看待。
实验举例
1.双引号解析变量,但是单引号不解析变量
<?php
//声明变量$shouji
$shouji = '为了苹果手机去卖肾';
//在双引号中放$shouji 然后echo 一下是什么效果呢?
$str = "$shouji 会不会显示呢?";
//输入$str试试
echo $str;
?>
通过上边的例子,我们发现。双引号中间的变量够执行显示,我们将$str这个字符串两边的双引号,改为单引号试试,再看一次执行结果:
发现$shouji 直接显示出来了,而不是双引号的显示结果。
通过上例,我们证明了:双引号执行变量,而单引号不执行变量。我们得到一个重要结论:
双引号需要解析变量,因此双引号的效率没有单引号高。我们如果为了更高的效率,我们通常使用单引号。
2. 在双引号里面插入变量,变量后面如果有英文或中文字符,它会把这个字符和变量拼接起来,视为一整个变量。可以在后面接上特殊字符,例如空格等分开。
<?php
$php = 'php中文网';
$str = "$phpaaaa";
//你会发现输出$str,什么都没有在页面中显示
echo $str;
?>
但是,我们在$str 声明的这个字符串中将$huaqiangu 后面接个空格再接aaaa,代码如下:
<?php
$php = 'php中文网';
//中间加了空格哟
$str = "$php aaaa";
echo $str;
?>
我们把代码再改改:
<?php
$php = 'php中文网';
//中间加了空格哟
$str = "$php!aaaa";
echo $str;
?>
大家打开一次页面,执行了一次代码看看结果是不是变为了:
php中文网!aaaa
因此,证明了我们的第二项观点。
3. 如果在双引号里面插变量的时候,后面不想有空格,可以拿大括号将变量包起来。
那,如果我不想在后面有空格有,有特殊符号,就想直接显示变量$huaqiangu呢?——我们的解决办法是用大括号把变量包起来。代码如下:
<?php
$php = 'php中文网';
//中间加了空格哟
$str = "{$php}aaaa";
echo $str;
?>
于是,大家会发现花千骨后面没有了特殊符号,也没有空格了,达到了我们想要的显示结果,演示效果如上:
4. 双引号解析转义字符,单引号不解析转义字符。但,单引号能解析\' 和\
第4个字符串的注意事项比较难以观察,转义字符有一些,但最常用的有:
\n 回车
\t 缩进
我们来通过实验先来理解\n和\t是什么。
<?php
//声明一个字符串,记住是双引号
$string = "每天来PHP中文网\n给梦想\t一个机会";
echo $string;
?>
为什么看不出来\n和\t代表什么含义,也看不出来双引号解析了\n和\t呢?——因为,你没有点击鼠标右键查看源代码。我们来点击一下,再看看效果。
第一步:显示网页源代码
第二步:查看HTML源代码显示的结果:
大家来对比字符串变量:
$string = "每天来PHP中文网\n给梦想\t一个机会";
\n在PHP学院的后面,在源代码里显示的结果是跟按了回车键一样的效果。
\t在给梦想和一个机会中间。显示的结果是有几个空格的效果。\t相当于我们在电脑上按了一个tab键效果。
但是,我们同样执行一下上面的代码,但是$string双引号改为用单引号:
你会发现——单引号中间的\t和\n直接显示出来了,而没有变成按一次回车键和按一次tab键后的效果。
因此:双引号执行转义字符而单引号不执行转义字符。
5. 转义字符\(反斜线的使用)
如果我们声明一个变量$beizi,我们想要在$beizi声明的双引号中间加上一个双引号显示输出怎么办?
<?php
//要在$beizi的字符串中显示一个双引号怎么办?
$beizi = "多于绝大多数的人出生就是杯具,但是"我们在不断的让人生变为喜剧";
echo $beizi;
?>
如果真如上述所写代码,代码会报错。报错结果如下:
因为字符串:“多于绝大多数的人出生就是杯具,但是"我们在不断的让人生变为喜剧”必须写在双引号中间。而双引号中间还有一个双引号。也就是意味着字符串声明提前结束了,在“但是”处结束了。后面"我们在不断的让人生变为喜剧",电脑不认识。
这真是一个杯具!那么办?
答:我们需要将双引号原有的意义去掉。再双引号前面加上一个\(反斜线,计算机的专业名词叫转义字符),就可以了。
你可以再执行一下上面的代码,发现不再报错了。同理可推,单引号当中要插入一个单引号显示出来的时候,也可以在单引号声明的字符串中的单引号前面加上(反斜线,转义字符),将单引号的意义(限定字符区间)去掉。
<?php
//要在$beizi的字符串中显示一个双引号怎么办?
$shengyang = 'i\'m xiaoshengyang';
echo $shengyang;
?>
6. 双号和单引号可以互插!!!双引号当中插入单引号,单引号当中插入变量,这个变量会被解析。
代码如下:
<?php
$legend = '猛虎';
$NoAlike = "心有'$legend',细嗅蔷薇";
echo $NoAlike;
?>
7. 神奇的字符串拼接胶水——(.)点,用来拼接字符串。
<?php
$php = 'PHP中文网';
//中间加了空格哟
$str = "{$php}aaaa";
echo $str;
?>
上面这段代码是,我们曾经说过双引号能够解析变量,有一个问题:效率没有纯单引号的高
那么问题1:我想改为效率最高的方式应该怎么办?
问题2:我有多个字符串,要拼接在一声怎么办?
那,我们需要使用到神奇的胶水:(.)点,用来拼接字符串。
<?php
$shixi = '大学4年要好好学习<br />';
$buran = '不然连实习的机会都没有<br />';
$mimang = '把别人用来迷茫的时间拿到PHP中文网<br />';
$xuexi = '学习PHP<br />';
//我们可以把字符串全部拼接起来。
echo $shixi . $buran . $mimang . $xuexi;
?>
因此,刚刚的问题一的代码我们可以改为:
<?php
$php = 'PHP中文网';
//中间加了空格哟
$str = $php . 'aaaa';
echo $str;
?>
8. 我们将定界符声明字符串视为双引号一样的功能来看待。
<?php
$weilai = '努力才有未来';
$mimang = '迷茫的原因是没有目标';
$dingjie = <<<ABC
如果
$weilai
非要\t在这"个滚"犊子
前
'$mimang'
面<br />
加上\n一段
<i>距离的话</i>
我想说:<h1>思想有多远,你就跟我滚多远</h1>
ABC;
echo $dingjie;
?>
你可以执行发现$weilai,$mimang,\t\n都可以执行,双引号单引号都能显示。这就是定界符的特点。
再声明一次:字符串的声明每一项都必须记住,非常常用。并且面试题出现的概率非常高!
不可见字符:主要是计算机规定的一些特殊符号。例如:回车(\n)、缩进(\t)等。
八、php数据类型之浮点型
所谓浮点类型,可以理解为:我们数学里面的小数。
【注意】关于精度、取值范围和科学型声明不是学习的重点。因为此块在实际开发中用的特别少。我们将此块的知识点的学习标注为,了解级别。
声明方式分为两种:普通声明
科学声明
普通声明浮点数
<?php
//声明变量$fl 的值为0.8873
$fl = 0.8873;
var_dump($fl);
?>
<?php
//声明变量fudian的值为12121.3132
$fudian = 12121.3132;
echo $fudian;
?>
echo 直接输出了12121.3132,而var_dump 输出了0.8873,还显示了变量$fl的类型为float。
var_dump() 是一个函数。向括号()中间插入变量。这个函数,会打印出来数据类型,还会对应显示变量的长度和值。
九、php流程控制之if else语法
if和else语法
这是一个非常重要的章节,也是PHP当中的一个重要的语法。
【注意】我对这个语法的定义级别为:默写级别。也就是你需要,闭着眼睛,都能够写出来的东西。
<?php
//我们定义一个泡到美女的变量($pao)为true,意思为泡到了
$pao = true;
if($pao){
echo '我愿意去死';
echo '林志玲,我爱死你了。';
}else{
echo '我不愿意去死';
echo '凤姐,我肯定不会爱你的';
}
//if...else执行结束,后续代码
?>
我们将if和if...else组合成了四种基本语法,每一种都必须背下来。
<?php
if(布尔条件)
布尔值为真(true)时执行,只能写一行代码;
?>
<?php
if(布尔条件)
布尔值为真(true)时执行,只能写一行代码;
else
布尔值为假(false)时执行,只能写一行代码;
?>
<?php
if(布尔条件){
布尔值为真(true)时执行,可写多行代码;
}
?>
<?php
if(布尔条件){
布尔值为真(true)时执行,可写多行代码;
}else{
布尔值为假(false)时执行,可写多行代码;
}
?>
很多人喜欢买彩票,我们拿买彩示的过程来写个if的例子。
<?php
//定义一下中奖变量,变量的值为true,表示中奖了
$zhongjiang = true;
//由于$zhongjiang 结果为true,所以显示了:“买个房子”
//可以改为false试试执行结果,如果为false的话,不会执行echo '买个房子';
if($zhongjiang){
echo '买个房子';
}
//后续代码
echo '该干嘛干嘛';
?>
十、php数据类型之 NULL类型
空在英文里面表示是null,它是代表没有。空(null)不是false,不是0,也不是空格。【重点】知道null产生的三种情况,学习empty 和 isset两个函数的区别。
主要有以下三空情况会产生空(null)类型:
1.通过变量赋值明确指定为变量的值为NULL
2.一个变量没有给任何值
3.使用函数unset()将变量销毁掉
我们用代码来演示一下。
<?php
//声明一个变量$iphone的值为字符串的手机
$iphone = '手机';
//unset销毁掉一个变量unset($iphone);
var_dump($iphone);
?>
接下来我们来讲解两个跟null相关的函数,这两个函数非常常用,我们将级别定义为【默写级别】。
empty()可以向括号中间传入一个变量。这个变量的值如果为false或者为null的话,返回true。
<?php
$apple = null;
if(empty($apple)){
echo '执行了真区间,凤姐,我爱你';
}else{
echo '行了假区间,你想凤姐了';
}
?>
上述实验证明,$apple为null。将apple放至empty中间。结果执行了真区间。
isset()可以向括号中间传入一个或者多个变量,变量与变量间用逗号分开。只要有有一个变量为null,则返回false。否则,则返回true。
<?php
$one = 10;
$two = false;
$three = 0;
$four = null;
$result = isset($one , $two , $three , $four);
//执行看看结果,是不是
var_dump($result);
?>
unset()这个函数的功能是毁掉变量。unset(变量)括号中间插入想要毁掉的变量名,这个变量就会被毁掉。
十一、php数据类型之资源类型
资源类型
资源类型很多初学者觉得比较难以理解。因为资源类型打印出来只能够看到一个英文的resource。其他的什么在电脑上都不能显示出来,而他有客观存在。
其实,资源类型很简单。我们针对词来进行说明。
电脑里面的资源是指:
1.word,excel等文件
2.有人收藏的美女图片和我们的自拍照片等图片
3.音乐
4.某些人爱看的AVI小电影
5.打开的网页
6.数据库
... ...等等
我们打开一个图片,用PHP来操作它,我们就是操作的一个资源。
我们打开的数据库连接,我们需要连接数据库,数据库就是我们操作的资源。
包括网络连接,连接后发送邮件,我们也可以认为是一个资源。
<?php
//PHP操作图片需打开配置文件中 extension=php_gd2.dll
//==================================================生成图片
$imgname = "./test.png";
//根据给定路径图片名或 web 路径创建 png 图片模板对象,图片不存在会报错,需加 @
$im = @imagecreatefrompng ( $imgname );
//对应的创建jpg图片的方法为 imagecreatefromjpeg ,例
//$im = imagecreatefromjpeg("http://wx.qlogo.cn/mmopen/Q3auHgzwzM4fA6602v35iaPhicn4NerIoHhHIsM6uBFjDnbn6saxic3QJBibmibterqicNwiajic1ff8Y2sPhj1ictV0wMw/096");
if (! $im) {
//=======================创建图片对象
//如果指定图片不存在,则创建指定大小的空图片模板对象,宽800,高500
$im = ImageCreate ( 800, 500 );
//第二种创建图片方法
$im = ImageCreateTrueColor(800, 500);
//=======================创建颜色对象
//依据一个模板对象,生成颜色对象,0为red值,100为green值,30为blue值
//ImageCreate 创建的对象在此会直接将颜色填充至模板对象中,ImageCreateTrueColor 创建的对象则只创建颜色对象,不填充
$bgc = ImageColorAllocate ( $im, 0, 100, 30 );
$tc = ImageColorAllocate ( $im, 0, 0, 0 );
//=======================填充颜色
//为图片对象填充矩形颜色,如果空模板对象不填充颜色则为黑色
//100,50对应矩形填充区域左上角的横纵坐标,150,200对应矩形右下角的横纵坐标
//这里坐标对ImageCreate模板对象不起作用,全局填充,对ImageCreateTrueColor起作用。
ImageFilledRectangle ($im, 100, 50, 150, 200, $bgc);
//第二种填充方法200,100同样为左上角横纵坐标,但这里坐标对两种方法创建的模板对象都不起作用,完全填充
ImageFill($im, 200, 100, $bgc);
//=======================填充文字
//在模板对象中添加文字两种方法
//40字体粗度,50字体左边距距离,5字体上边距距离,$tc字体颜色,这种方式只能填充英语,填中文乱码
ImageString ( $im, 40, 50, 5, "just is English code", $tc );
//添加中文18为字体大小,0字体旋转程度,100左边距距离,200上边距距离,项目目录下要有"MSYH.TTF"这个字体文件
imagettftext($im, 18, 0, 100, 200, $tc, "MSYH.TTF", "填充中文");
}
//==================================================合成图片
// 载入图象
$img1 = imagecreatefromjpeg("image1.jpg");
$img2 = imagecreatefromjpeg("064.jpg");
//方法一合成图象 ,将参数二合成到参数一中,500离主图片左边距,400离主图片上边距,0新合图片内右边距偏移量,10新合图片内下边距偏移量, 243合到参数一后所占位置宽,90合到参数一后所占位置高
//imagecopy($img1,$img2,500,400,0,10,243,90);
//得到原始大图片尺寸
$imgage = getimagesize("064.jpg");
$src_W = $imgage[0]; //获取原图片宽度
$src_H = $imgage[1]; //获取原图片高度
//方法二合成图象并改变大小,500,400,0,10,与imagecopy作用一致,200分别是缩小后宽,高,$src_W,$src_H原图宽,高
//imagecopyresampled($img1, $img2, 500,400,0,10, 200, 200, $src_W, $src_H);
//方法三,并且合透明图必须用此方法,别的合成方法合成后该透明的地方无法透明
//500,400,0,10, 243,90,与imagecopy作用一致,100表示参数二在参数一中透明程度,范围0~100,0完全透明,100完全不透明
imagecopymerge($img1, $img2, 500,400,0,10, 243,90, 100);
//==================================================合成圆角图片
//每次生成圆的四个角中一个角,中心透明,边角有色的图片,用于合成
function get_lt($halfWidth) {
//根据圆形弧度创建一个正方形的图像
$img = imagecreatetruecolor($halfWidth, $halfWidth);
//图像的背景
$bgcolor = imagecolorallocate($img, 223, 0, 0);
//填充颜色
imagefill($img, 0, 0, $bgcolor);
//定义圆中心颜色
$fgcolor = imagecolorallocate($img, 0, 0, 0);
// $halfWidth,$halfWidth:以图像的右下角开始画弧
// $halfWidth*2, $halfWidth*2:已宽度、高度画弧
// 180, 270:指定了角度的起始和结束点
// fgcolor:指定画弧内的颜色
imagefilledarc($img, $halfWidth, $halfWidth, $halfWidth*2, $halfWidth*2, 180, 270, $fgcolor, IMG_ARC_PIE);
//将图片中指定色设置为透明
imagecolortransparent($img, $fgcolor);
//变换角度
// $img = imagerotate($img, 90, 0);
// $img = imagerotate($img, 180, 0);
// $img = imagerotate($img, 270, 0);
// header('Content-Type: image/png');
// imagepng($img);
return $img;
}
$img1 = imagecreatefrompng("vote_2.png");
$img2 = imagecreatefromjpeg("064.jpg");
//获取图片尺寸
$imgSize = getimagesize("064.jpg");
$image_width = $imgSize[0];
$image_height = $imgSize[1];
//圆角长度,最好是图片宽,高的一半
$halfWidth = $image_width / 2;
//获取四分之一透明圆角
$lt_img = get_lt($halfWidth);
//改造$img2 左上角圆角透明
imagecopymerge($img2, $lt_img, 0, 0, 0, 0, $halfWidth, $halfWidth, 100);
//旋转图片
$lb_corner = imagerotate($lt_img, 90, 0);
//左下角
imagecopymerge($img2, $lb_corner, 0, $image_height - $halfWidth, 0, 0, $halfWidth, $halfWidth, 100);
//旋转图片
$rb_corner = imagerotate($lt_img, 180, 0);
//右上角
imagecopymerge($img2, $rb_corner, $image_width - $halfWidth, $image_height - $halfWidth, 0, 0, $halfWidth, $halfWidth, 100);
//旋转图片
$rt_corner = imagerotate($lt_img, 270, 0);
//右下角
imagecopymerge($img2, $rt_corner, $image_width - $halfWidth, 0, 0, 0, $halfWidth, $halfWidth, 100);
//生成红色
$red = imagecolorallocate($img2, 223, 0, 0);
//去除参数二中红色设成透明
imagecolortransparent($img2, $red);
imagecopymerge($img1, $img2, 117,37,0,0, 64, 64, 100);
//设定http输出格式
//header ( "Content-type: image/png" );
header("Content-type: image/jpeg");
//将二进制文件流输出到网页
//imagePng ( $im );
//如果是jpg二进制流用 imagejpeg 输出图象,并且后面加路径则直接生成保存图片,不再在页面输出
//如果已有图片则覆盖生成
//imagejpeg($img1, "new.jpg");
imagejpeg($img1);
//注销模板对象
ImageDestroy($im);
ImageDestroy($img1);
ImageDestroy($img2);
?>
十二、php数据类型之查看和判断数据类型
我们知道了一个数据的类型,才能进行下一步操作。后面的时候,大家可以学习到更多的知识——自定义功能(函数)。
我们来做一个场景模拟:(注:眼前不用会写这个函数,以后会教大家)
假设,我们可以写一个智能的功能(函数),它让有一个功能,就是打开一个装有学生成绩的电子表格。这个函数非常先进。
1.只有一个人的时候,就返回一个人的成绩,成绩是整型或者浮点型变量。
2.有2个或两个以上人的时候,返回一个数组类型变量,数组中装有多个人的成绩
3.如果没有人的时候,则返回布尔值的变量,变量值为false
通过上面的一个场景模拟,我们知道了,一个函数(功能)有可能返回不同的数据类型。因此,我们可以根据不同的类型来做不同的事情。
判断数据类型很重要,我们需要严格掌握。
【默写级知识点】显示类型的函数、得到类型的函数、判断类型的函数
查看数据类型
1.gettype(传入一个变量) 能够获得变量的类型
2.var_dump(传入一个变量) 输出变类型和值
<?php
//声明一个变量88.8,你可以自己多做几次实验换成其他类型看看$type输出是多少
$float = 88.8;
$type = gettype($float);
echo $type;
?>
<?php
//多换几个类型试试
$str = '你喜欢尊上还是喜欢杀仟陌?';
var_dump($str);
?>
判断数据类型
我们使用is_* 系列函数。 is_types这一系列的函数,来进行判断某个东西是不是某个类型。如果是这个类型返回真,不是这个类型返回假。
is_int 是否为整型
is_bool 是否为布尔
is_float 是否是浮点
is_string 是否是字符串
is_array 是否是数组
is_object 是否是对象
is_null 是否为空
is_resource 是否为资源
is_scalar 是否为标量
is_numeric 是否为数值类型
is_callable 是否为函数
<?php
//is_* 系列函数有个特点,就是如果是这个类型就返回的是真。不是这个数据类型就返回的是假
//声明类型为假
$fo = false;
if(is_bool($fo)){
echo '第一个真';
}else{
echo '第一个假';
}
echo "<br/>";
//检查未声明的变量$p是否为空,为空就执行真区间
if(is_null($p)){
echo '第二个真区间';
}else{
echo '第二个假区间';
}
echo "<br/>";
//字符串类型的数值,看看执行的是真还是假
$str = '18.8';
if(is_numeric($str)){
echo '第三个真区间';
}else{
echo '第三个假区间';
}
echo "<br/>";
//把sca的值换成整型、浮点、布尔和字符串试试
$sca = true;
//如果为标量,执行真区间
if(is_scalar($sca)){
echo '第四个真区间';
}else{
echo '第四个假区间';
}
echo "<br/>";
//换成echo,is_int试试,为什么echo执行假区间呢?
if(is_callable('var_dump')){
echo '第五个真区间';
}else{
echo '第五个假区间';
}
?>
注:is_types 很好记。is_ 在前后面跟类型即可。
变量:整型(int) 浮点(float)、布尔(bool)、字符串(string)
混合类型: 数组(array)、对象(object)
特殊类型:空(null)、 资源(resouce)、回调(callback)
为什么最后的实验中echo执行假区间呢?
答:因为echo 不是函数,是基本语法。大家眼前可以不用理解函数和基本语法的区别。了解和不了解在实际开发中没有影响。知道有这个知识点就行。
十三、php数据类型之自动转换和强制转换
PHP在PHP 5.x阶段都是完全的弱类型的编程语言。所谓弱类型,就是在声明变量的时候,不需要指定变量的类型。我要声明一个整型的变量,我不用在前面非得写上类型,再写变量。
而PHP 7 的性能有很大的提高。实际测试的结果,PHP 7的性能与PHP5.6相比,提升了性能接近200%。在PHP 7 中有些地方,我们可以强制指定类型,也可以不用强制指定类型来声明变量。
我们接来下来讲强制类型转换和自动类型转换两个部份。
【默写级别】布尔值的自动类型转换、强制类型转换的英文单词
布尔值的自动类型转换
自动类型转换,就是数据类型在某些情况下,自动会变为其他的类型参与运算。自动类型转换的发生时机是:运算和判断的时候某些值会自动进行转换。
下面的情况是布尔值判断时的自动类型转换:
1,整型的0为假,其他整型值全为真
2, 浮点的0.0,布尔值的假。小数点后只要有一个非零的数值即为真。
3,空字符串为假,只要里面有一个空格都算真。
4,字符串的0,也将其看作是假。其他的都为真
5,空数组也将其视为假,只要里面有一个值,就为真。
6,空也为假
7, 未声明成功的资源也为假
我们针对以上针理的规则一项一项来做实验看看结果。
1,整型的0为假,其他整型值全为真
2, 浮点的0.0,布尔值的假。小数点后只要有一个非零的数值即为真。
<?php
//浮点类型的的0,换成其他值试试
$bool = 0.0;
if($bool){
echo '美女美女我爱你';
}else{
echo '凤姐凤姐爱死我,执行假区间咯';
}
?>
3,空字符串为假,只要里面有一个空格都算真。
<?php
//空字符串,中间没有空格哟。实验完加个空格试试
$str = '';
if($str){
echo '美女美女我爱你';
}else{
echo '凤姐凤姐爱死我,执行假区间咯';
}
?>
4,字符串的0,也将其看作是假。其他的都为真
<?php
//0这个字符串哟,试试其他值看看
$str = '0';
if($str){
echo '美女美女我爱你';
}else{
echo '凤姐凤姐爱死我,执行假区间咯';
}
?>
5,空数组也将其视为假,只要里面有一个值,就为真。
<?php
//这个数组当中啥也没放
$arr = array();
if($arr){
echo '美女美女我爱你';
}else{
echo '凤姐凤姐爱死我,执行假区间咯';
}
?>
6,空也为假
<?php
//声明了一个空的变量$bool
$bool = null;
if($bool){
echo '美女美女我爱你';
}else{
echo '凤姐凤姐爱死我,执行假区间咯';
}
?>
7, 未声成功的资源也为假
<?php
//下面这段代码会显示警告,可忽略。暂时只需要对着实验知道效果即可:未声成功的资源也为假
//下面这一块了解意思就行:打开adasfasfasfdsa.txt这个不存在的文件
$res = fopen('adasfasfasfdsa.txt','r');
if($res){
echo '美女美女我爱你';
}else{
echo '凤姐凤姐爱死我,执行假区间咯';
}
?>
其他类型的自动类型转换
自动类型转换在运算时也可以发生。跟所有我们总结的规律和观点一样:先总结、后实验。
只有标量在运算时会产生以下的自动类型转换:
<?php
//布尔变整型参与运算
$fo = true;
$result = $fo + 10;
//$result 结果为整型的11,因为$fo布尔的true变为了1
//如果$fo的值为0
var_dump($result);
//字符串类型
$str = '419不要爱';
$result = $str + 1;
//结果为420。因为将$str变为了整型的419参与运算
//将419放在字符串中间和结尾试试
var_dump($result);
?>
总结:
布尔值的true参与运算是会变成整型或者浮点的1布尔值的false参与运算是会变成整型或者浮点的0字符串开始处是整型或浮点类型的字符,会转成对应的类型参与运算
强制类型转换
强制类型转换有三种方式:
1.用后面的三个函数可以完成类型转换,intval()、floatval()、strval()
2.变量前加上()里面写上类型,将它转换后赋值给其他变量
3.settype(变量,类型) 直接改变量本身
我们来进行实验:
intval()、floatval()、strval()转换
<?php
$float = 1.23;
$result = intval($float);
//看看结果是不是变了?
var_dump($result);
//鸭脖子为整型的5
$yabozi = 5;
$re = floatval($yabozi);
var_dump($re);
//定义整型的变量
$yabozi = 23;
$bian = strval($yabozi);
//强制变成字符串试试
var_dump($bian);
?>
变量前加上()里面写上类型,将它转换后赋值给其他变量
<?php
//定义一个变量,我们来变化一下试试
$transfer = 12.8;
//把浮点变为整型
$jieguo = (int)$transfer;
var_dump($jieguo);
//把浮点变为布尔
$jieguo = (bool) $transfer;
var_dump($jieguo);
//把布尔变整型
$bool = true;
$jieguo = (int)$bool;
var_dump($jieguo);
//把浮点变数组
$fo = 250;
$jieguo = (array)$fo;
var_dump($jieguo);
//其他的操作方式,按照文字总结的规律你来试试
?>
settype(变量,类型) 直接改变量本身
<?php
//定义浮点变为整型
$fo = 250.18;
//settype第二个参数是int,你实验的时候要记得第二个参数要为字符串类型
settype($fo,'int');
//输出看看结果
var_dump($fo);
?>
【你试试】以下是强制类型转换时的特点,每一项你做实验看看对不对:
1.空转为整型会为整型的0
2.空转为浮点会为浮点的0
3.空转为字符串会为空字符串‘’
4.浮点的123.0转为字符串会为字符串123
5.浮点的123.2转为字符串会为字符串的123.2
6.浮点即使小数点再大,它都会被干掉,会舍掉小数点后面的值
7.如果字符串转为整型的时候,如果数值在前面,会将前面的数值拿出来做为整型的转换值。
8.settype(变量,'null'); 等价于 unset()一个变量
9.$目标变量 = (类型)$操作变量 只会改变目标变量的类型,不会改变原变量的类型,Settype是改变原值
<?php
//小可爱,记得自己做实验,验证上面的9点哟
$t=12.9;
settype($t,'int');
var_dump($t);
?>
十四、php常量和变量之用常量限制用户跳过某些文件
【重点知识】知识级别我们定义为:默写级
常量的使用范围非常广泛。我们在以后,定义我们的工作目录、定义一些特点的帐户密码、版本号等我们都会使用到常量。所以这一块的知识,非常重要。
常量在代码中的定义、书写方式:
define(常量名,常量值)
注:
1.常量值只能为上一章中我们讲到的标量。
2.常量名可以小写,但是通常大写
3.常量名可以不加引号,但是通常加上引号。
4.在字符串中调用常量的时候,必须在引号外面
5.常量名建议只用字母和下划线
我们用代码来实验一下:
1.定义和调用一次常量试试
<?php
define('MY_NAME','PHP中文网');
echo MY_NAME;
//下面是错误的调用方式
echo '我的名字是MY_NAME';
//正确的调用方式该这么写
echo '我的名字是' . MY_NAME;
?>
2.注意项目实验
<?php
//其实可以小写,但是不好区分,所以我们规定通常大写
define('xiaoxie',true);
echo xiaoxie;
//常量可以在外面不加引号
define(YH,'不要对未来迷茫,迷茫的时候静下心来coding');
echo YH;
//只能用标量,我在后面用了一个数组,大家学一下就行,会报错的哟
define('BIAO',array(1,2,3));
echo BIAO;
?>
此外,系统还为我们准备了一些内置的常量。这些常量都是规定好的。我们先熟悉几个,还有更多的系统常量我们学习完上册,入门后再慢慢的增加和学习。
defined()函数来做安全机制
此处知识,可以眼前不用掌握。学习完函数后,再来看本部份代码也可以。
defined()我们来学习这种用法,主是是为了防止其他人绕过安全检查文件。
函数:defined(常量)
功能:向函数的括号后面传入常量,如果常量定义了就返回true,否则返回false;
【情景模拟】假设,我们的这套在线电子商城的软件需要付钱,检查是否付费是通过对软件授权检查来完成的,而文件version.php中就有检查授权的功能,我们在软件中规定,没有授权检查文件version.php就不能使用这个软件。所有的代码都包含了version.php。并且为了防止有人盗版,我还可以把version.php的代码进行了加密。
我们有两个文件:
1.一个文件中间有版本号,版本声明和授权声明。文件名为version.php
2.一个文件中有具体的业务功能。例如:用户注册、登陆等,文件名为users.php
我们该怎么做呢?——也就是说不包含 version.php文件就不让,执行users.php之后的代码。
我们来进行实验:
version.php文件
<?php
//此处是检查是否是否授权的业务部份代码xxxx
define('AUTH',true);
//略过模拟代码xxx行
echo AUTH;
?>
users.php
<?php
//尝试将include 'version.php'这一行代码注释后再执行看看,对比结果
//include 'version.php';
if(!defined('AUTH')){
echo '非法!非法!你尝试跳过授权文件';
exit;
}
//模拟后面用户注册和用户登陆的代码xxx行
echo '用户注册';
?>
实验结果可知:version.php必须要包含 ,不然不会显示后面的echo '用户注册';
十五、php常量和变量之可变变量
可变变量,这个词解释的太过于高大上。看起来很有“bigger”。它还有一个叫法,叫作变量的变量。
我们认为这些叫法上都不太科学。毕竟都是翻译过来的舶来之物。
可变变量其实就是——已声明的变量前,再上变量符。
举例说明:
<?php
//定义了一个变量叫作 $shu 将$shu这个变量的值设为字符串的biao
$shu = 'biao';
//定义了一个【变量】$biao。将他的值设置为鼠标
$biao = '鼠标';
//$$shu 就是可变变量:在已声明的变量$shu前又加上了一个变量符
echo $$shu;
?>
上面的过程说明:$shu的值为字符串的'biao'。我在$shu前再加上一个$(美元符号),可以理解成为以下的变形过程:
$$shu
${$shu} 分成两块来看
${'biao'} 把变量$shu解释成了biao
$biao 而$biao也是一个变量对应的值是:鼠标
你可以自己写几个可变变量玩玩,请问以下的代码运行结果是多少?
<?php
$shu = 'biao';
$biao = 'wo';
$wo = 'test';
$test = 'sina';
$sina = 'zhongguo';
$zhongguo = 'china';
$china = '我爱你';
//别运行,自己去推理一下代码。也写几个可变变量玩玩吧!
echo $$$$$shu;
?>
