系列文章目录
提示:以下是本篇文章正文内容,下面案例可供参考
文章目录
一、PHP常用注释
//单行注释
/*
多行注释
*/
二、安装好PHP后可以用phpinfo();做测试是否安装好PHP
代码如下(示例):
<?php
phpinfo();
?>
二、变量
变量是用于储存信息的一个类似盒子一样的东西
<?php
$x=5;
$y=6;
$z=$x+$y;
echo $z;
?>
PHP 变量规则:
变量以 $ 符号开始,后面跟着变量的名称
变量名必须以字母或者下划线字符开始
变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )
变量名不能包含空格
变量名是区分大小写的($y 和 $Y 是两个不同的变量)
三、PHP变量规则
1.类命名
(1)使用camel命名法(这个几乎所有语言通用)
(2)尽量少于3个词
(3)缩写词也不要全部使用大写字母。eg:使用GetHtmlStatic, 而不使用GetHTMLStatic。
2.函数和方法命名
通常每个方法和函数都执行一个动作,所以对它们的命名应该清楚地说明它们的用途。
eg:用CheckForErrors()代替ErrorCheck(),用DumpDataToFile代替DataFile().
3.类属性命名
属性命名应该以字符"m" 为前缀。前缀”m“后采用于类命名一致的规则。
eg: var mVar;
4.变量命名
使得所有的变量在代码中看起来都不同,容易辨认.
局部变量命名:所有字母都使用小写,使用 ”_“ 作为每个词的分界
eg:$time_of_error
全局变量命名:带前缀 "g"
eg: global $gLog;
静态变量命名:带前缀 "s"
eg: static $msStatics = 0;
引用变量命名:带前缀 ”r“
eg: var mrStatus;
string,字符串型,在变量前面加str
四、PHP中echo和print的区别
一般来说,PHP中动态输出HTML内容,是通过print 和 echo 语句来实现的,在实际使用中, print 和 echo 两者的功能几乎是完全一样。可以这么说,凡是有一个可以使用的地方,另一个也可以使用。但是,两者之间也还是一个非常重要的区别:在 echo 函数中,可以同时输出多个字符串,而在 print 函数中则只可以同时输出一个字符串。同时,echo函数并不需要圆括号,所以echo函数更像是语句而不像是函数。
echo 和 print 都不是函数,而是语言结构,所以圆括号都不是必需的。
他们的区别在于
(1)echo可以输出多个字符串,像下面这样:
echo 'a','b','c';
如果你非要加上圆括号,注意写成echo (‘a’,‘b’,‘c’);是错误的,应该写成:
它没有像函数的行为,所以不能用于函数的上下文
(2) print只能输出一个字符串,它可以表现得像一个函数,比如你可以如下使用:
$ret = print 'Hello World';
所有它能用在更复杂的表达式中。
另外,echo的效率相对比较快!
看看如下代码:
<?php
$a='hello ';$b='php world!';echo $a,$b.'<br />';//echo 可以用逗号分隔字符串变量来显示
print $a.$b.'<br />';//而print不能使用逗号,只能用点号分隔,
//print $a,$b.'<br />';//这里使用逗号时报错。
?>
PHP EOF(heredoc) 使用说明
PHP EOF(heredoc)是一种在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序语言(像Perl、PHP、Python和Ruby)里定义一个字符串的方法。
使用概述:
- 必须后接分号,否则编译通不过。
- EOF 可以用任意其它字符代替,只需保证结束标识与开始标识一致。
- 结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)。
- 开始标识可以不带引号或带单双引号,不带引号与带双引号效果一致,解释内嵌的变量和转义符号,带单引号则不解释内嵌的变量和转义符号。
- 当内容需要内嵌引号(单引号或双引号)时,不需要加转义符,本身对单双引号转义,此处相当与q和qq的用法。
<?php
echo <<<EOF
<h1>我的第一个标题</h1>
<p>我的第一个段落。</p>
EOF;
// 结束需要独立一行且前后不能空格
?>
注意
1.以 <<<EOF 开始标记开始,以 EOF 结束标记结束,结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号 。
2.开始标记和结束标记相同,比如常用大写的 EOT、EOD、EOF 来表示,但是不只限于那几个(也可以用:JSON、HTML等),只要保证开始标记和结束标记不在正文中出现即可。
3.位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。在 heredoc 中,变量不需要用连接符 . 或 , 来拼接,如下:
<?php
$name="runoob";
$a= <<<EOF
"abc"$name
"123"
EOF;
// 结束需要独立一行且前后不能空格
echo $a;
?>
四、数据类型
String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型), Array(数组), Object(对象), NULL(空值)。
常量
常量是一个简单值的标识符。该值在脚本中不能改变。
一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。
注意: 常量在整个脚本中都可以使用。
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
<?php
// 不区分大小写的常量名
define("GREETING", "欢迎访问 c.isme.pub", true);
echo greeting; // 输出 "欢迎访问 c.isme.pub"
?>
并置运算符
<?php
$txt1="Hello";
$txt2="wowo";
echo $txt1 . " " . $txt2;
?>
获取字符串长度
<?php
echo strlen("Hello wowo");
?>
查找字符或指定文本
?php
echo strpos("Hello wowo","wowo");
?>
递增,递减
<?php
$x=10;
echo ++$x; // 输出11
$y=10;
echo $y++; // 输出10
$z=5;
echo --$z; // 输出4
$i=5;
echo $i--; // 输出5
?>
‘==’ 和 ‘===’的区别
== 值相等
===值和类型都相等
三元运算
(expr1) ? (expr2) : (expr3)
<?php
$test = 'wowo';
// 普通写法
$username = isset($test) ? $test : 'nobody';
echo $username, PHP_EOL;
// PHP 5.3+ 版本写法
$username = $test ?: 'nobody';
echo $username, PHP_EOL;
?>
php条件语句
if...elseif....else
if (判断条件)
{
if 条件成立时执行的代码;
}
elseif (条件)
{
elseif 条件成立时执行的代码;
}
else
{
条件不成立时执行的代码;
}
switch
<?php
switch (n)
{
case label1:
如果 n=label1,此处代码将执行;
break;
case label2:
如果 n=label2,此处代码将执行;
break;
default:
如果 n 既不等于 label1 也不等于 label2,此处代码将执行;
}
?>
while
<html>
<body>
<?php
$i=1;
while($i<=5)
{
echo "The number is " . $i . "<br>";
$i++;
}
?>
</body>
</html>
for
<?php
for ($i=1; $i<=5; $i++)
{
echo "数字为 " . $i . PHP_EOL;
}
?>
数组
数组是一个能在单个变量中存储多个值的特殊变量。
在 PHP 中,array() 函数用于创建数组:
array();
在 PHP 中,有三种类型的数组:
数值数组 - 带有数字 ID 键的数组
关联数组 - 带有指定的键的数组,每个键关联一个值
多维数组 - 包含一个或多个数组的数组
自动分配 ID 键(ID 键总是从 0 开始):
$cars=array("Volvo","BMW","Toyota");
人工分配 ID 键:
$cars[0]="Volvo";
$cars[1]="BMW";
$cars[2]="Toyota";
count() 函数用于返回数组的长度(元素的数量):
<?php
$cars=array("Volvo","BMW","Toyota");
echo count($cars);
?>
遍历并打印数值数组中的所有值,您可以使用 for 循环,如下所示:
<?php
$cars=array("Volvo","BMW","Toyota");
$arrlength=count($cars);
for($x=0;$x<$arrlength;$x++)
{
echo $cars[$x];
echo "<br>";
}
?>
五、运算符
算数运算符
+ 加
- 减
* 乘
/ 除
% 取余
- 取反
. 并置,连接符
递增/递减运算符
++x 预递增
x++ 后递增
--x 预递减
x-- 后递减
注:不管运算符是前置还是后置,对x的结果都是递增或递减的,前置后置影响的是运算符处理后的结果
比较运算符
== 等于
=== 绝对等于,类型也要一致
!=或者<> 不等于
!=== 不等于或者类型不同
> 大于
< 小于
>= 大于等于
<= 小于等于
逻辑运算符
and或者&& 并且
or或者|| 或者,至少一个为真
xor 异或,有且仅有一个为真
! 非
三元运算符
语法格式如下,相当于if...else...
(expr1) ? (expr2) : (expr3)
注:在 PHP7+ 版本多了一个 NULL 合并运算符 ??, 相当于js中 ||
<?php
// 如果 $_GET['user']存在则返回本身,不存在返回 'nobody'
$username = $_GET['user'] ?? 'nobody';
// 类似的三元运算符
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
组合比较符(PHP7+)
<?php
// 整型
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
// 浮点型
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
// 字符串
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
?>
位运算符
# [php--关于位运算符](http://www.cnblogs.com/exceed/p/5034760.html)
常见四个位运算符:&(按位与),|(按位或),^(按位异或),~(按位取反)
&(按位与):对应位同时为1时,在&运算后则为1,否则为0
|(按位或):对应位有一个为1时,在|运算后则为1,同为0时则为0
^(按位异或):对应位不同时为1时,在^运算后为1,同时为0时则为0,同时为1时^运算后也是0
~(按位取反):$a+(~$a)=-1
在计算机中,负数以其正值的补码形式表达。
在这里我们就要知道三个概念了,原码,反码和补码。
原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。
8的原码为:0000 0000 0000 0000 0000 0000 0000 1000
反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。取反操作指:1变0, 0变1。
8按位取反:1111 1111 1111 1111 1111 1111 1111 0111
补码:反码加1称为补码。也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。
正数的补码与其原码相同;负数的补码是在其反码的末位加1
反码加1:1000 0000 0000 0000 0000 0000 000 1001;这样就得负数的正值的补码形式。也就是-9了。
参考:http://www.cnblogs.com/setsail/archive/2013/05/22/3093542.html
http://my.oschina.net/WarRome/blog/90707
以上解释自己也没有看的太懂,但实践得出$a+(~$a)=-1
小例如下:
<?php
$m=8;
$n=12;
$p=-109;
$mn=$m&$n;
echo $mn."<br>";
$mn=$m|$n;
echo $mn."<br>";
$mn=$m^$n;
echo $mn."<br>";
$mn=~$m;
echo $mn."<br>";
$mn=~$p;
echo $mn."<br>";
?>
输出结果:
8
12
4
-9
108
关于按位取反的问题,再琢磨琢磨
运算符优先级
注:整理来看优先级,算术 > 位 > 逻辑 > 赋值
六、PHP函数
函数是什么
暂且先记住这句话:
能够将一段代码封装成一个处理某个特定问题的代码块, , 通过调用的方式来执行, 从而简化代码编写的方法
函数结构分析
<?php
// 函数定义
function get_sum($a, $b) {
return $a + $b;
}
// 函数的调用
$sum = get_sum(2, 3);
echo $sum; // 5
?>
构成部分:
- 关键字: function
- 函数名: get_sum
- 命名规则: 有效的函数名以字母或下划线开头, 后面可以跟着字母, 数字或下划线
- 参数列表: ($a, $b)
- 函数体: { return $a + $b }
- 返回值: return $a + $b;
定义:
(a) 值通过使用可选的返回语句返回
(b) 可以返回数组和对象的任意类型
© 返回语句会立即终止函数的运行, 并且将控制权交回调用该函数的代码行
为什么使用函数呢
例子: 从一组数据中找出最大的数
<?php
// 从第一组数据中找出最大的数
$arr1 = array(3, 99, 789, 34, 43, 435);
$max1 = $arr1[0]; // 先将数组的第一个数据设为最大值
foreach($arr1 as $v1) {
// 如果当前的 $max1 小于$v1
if ($max1 < $v1) {
$max1 = $v1;
}
}
echo $max1; // 789
echo '<br />';
// 从第二组数据中找出最大的数
$arr2 = array(34, 45, 5463, 2452, 32452);
$max2 = $arr2[0]; // 先将数组的第一个数据设为最大值
foreach($arr2 as $v2) {
// 如果当前的 $max2 小于$v2
if ($max2 < $v2) {
$max2 = $v2;
}
}
echo $max2; //32452
// 如果多组数据...
?>
上面的代码实现了对一组数据取最大值,
如果我们有很多组这样的数据要取最大值,
那么就要重复的编写上面代码, 但这样是很浪费的一种行为, 这时候我们就可以通过封装一个函数的方法, 通过调用函数的方式来简化我们的编码:
<?php
// 取最大值
function max_num($arr) {
$max = $arr[0]; // 先将数组的第一个数据设为最大值
foreach($arr as $v) {
// 如果当前的 $max1 小于$v1
if ($max < $v) {
$max = $v;
}
}
return $max;
}
// 从第一组数据中找出最大的数
$arr1 = array(35,34532,567,564,345);
$max_val1 = max_num($arr1);
echo $max_val1; // => 34532
echo '<br />';
// 从第二组数据中找出最大的数
$arr2 = array(7894, 45, 345, 45, 56, 5);
$max_val2 = max_num($arr2);
echo $max_val2; // => 7894
echo '<br />';
// ...
?>
函数特性介绍
<?php
function get_sum($a, $b) {
$result = $a + $b;
return $result;
}
// 函数的调用
$sum = get_sum(2, 3);
echo $sum;
?>
函数形参与实参
·$a, $b 是函数的形参,
2 , 3 函数调用的实参, 实参可以是表达式, 变量等
形参和实参的数目对应关系:
(a) 如果 实参数目 < 形参数目: 程序报错/警告
(b) 如果 实参数目 = 形参数目: 参数会一一对应
© 如果 实参数目 > 形参数目: 程序会正确执行, 形参的值会一一对应, 比如 get_sum(2, 3, 4, 5), 那么 $a = 2, $b=3
函数的默认值
func ($a, $b, $c, $d = 'default')
{
// ..
}
上面给了第四个变量设置的默认值, 如果传参的时候没有传第四个参数, 则第四个参数的值为 default
例子:
<?php
// 函数定义
function get_sum($a, $b, $c = 60) {
$result = $a + $b + $c;
return $result;
}
// 函数的调用
$sum = get_sum(2, 4);
echo $sum.'<br />'; // 结果: 2 + 4 + 60 = 66
$sum2 = get_sum(2, 4, 100);
echo $sum2; // 结果: 2 + 4 + 100 = 106
?>
函数强类型参数
定义: 为参数列表中的参数指定类型, 如果传入的数据类型不匹配, 将会抛出 TypeError 异常,
支持类型:
PHP 5.0.0: class/interface name
PHP 5.1.0: array
PHP 5.4.0: callable
PHP 7.0.0: bool, float, int, string
function get_sum(int $a, int $b) {
$result = $a + $b;
return $result;
}
函数可变参数列表
PHP 5.5及更早版本:
func_num_args(): 返回参数的总数量
func_get_arg(): 返回参数列表的某一项
func_get_args(): 返回一个包含函数参数列表的数组
<?php
function test() {
echo '参数总数: ', func_num_args().'<br />'; // 参数总数: 4
echo '第一个参数: ', func_get_arg(0).'<br />'; // 第一个参数: 1
echo '全部参数: '; // => 全部参数:
print_r(func_get_args()); // => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
}
test(1, 2, 3, 4);
?>
PHP 5.6+:
使用 … 语法实现:
<?php
function test(...$args) {
echo $args[0].'<br />'; // => 1
echo count($args).'<br />'; // => 4
print_r($args); // => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
}
test(1, 2, 3, 4);
?>
函数值传递与引用传递
值传递: 不会改变原来实参的值
<?php
function test($num) {
$num = 5;
$result = $num + 1;
return $result;
}
$num = 4;
$res = test($num);
echo $res.'<br />'; // => 6
echo '$num: '.$num; // => $num: 4 ,$num 的值并没有被修改
?>
引用传递: 通过 & 来实现, 赋值给形参的是引用地址
<?php
function test(&$num) {
$num = 5;
$result = $num + 1;
return $result;
}
$num = 4;
$res = test($num);
echo $res.'<br />'; // => 6
echo '$num: '.$num; // => $num: 4 ,$num 的值也改变了
?>
函数变量作用域
局部变量:
1.当前页面中声明的普通变量, 不能在函数中或者类中起作用;
<?php
$a = 12;
function test() {
echo $a; // => 报错: Undefined variable: a
}
test();
?>
2.当前页面中声明的普通变量, 不能被传递到其他页面;
3.在函数中声明的普通变量, 在函数内部有效;
<?php
function test() {
$a = 12;
}
test();
echo $a; // => 报错: Undefined variable: a
?>
4.在类中声明的属性, 在类的内部有效;
全局变量 global
对于 PHP 而言, 可以这么说, 在页面中生成的变量都是全局变量, 在整个页面都是有效, 但是不能被函数或者类中的方法访问;
如果想被函数或者类中的方法访问, 我们就有了超全局变量:
$_GET, $_POST, $_COOKIE, $_SERVER, $_FILES, $_ENV, $_REQUEST, $_SEESION
<?php
$a = 12;
$b = 24;
$c = 29;
function test() {
global $b;
echo $a; // => Undefined variable: a
echo $b.'<br />'; // => 24
echo $GLOBALS['c']; // => 29
}
test();
?>
global 和 GLOBALS 使用的区别: global 是外部同名变量的引用, 而GLOBELS 外部的全局变量的本身
静态变量 static
函数内部声明的变量, 函数执行完即销毁,
而通过 static 声明的静态变量. 函数执行完之后并未丢失
<?php
function test() {
$a = 1;
$a++;
echo $a;
}
test(); // => 2
echo '<br />';
test(); // => 2
// ...
?>
通过 static 标识的静态变量
<?php
function test() {
static $a = 1;
$a++;
echo $a;
}
test(); // => 2
echo '<br />';
test(); // => 3
echo '<br />';
test(); // => 4
?>
PHP连接mysql
function mysql_con($sql){
$mysql_name = 'localhost';
$mysql_user = 'root';
$mysql_pw = 'root';
$mysql_db = 'update';
$conn = mysqli_connect($mysql_name,$mysql_user,$mysql_pw,$mysql_db);
if(! $conn )
{
die('Could not connect: ' . mysqli_error());
}
// 设置编码,防止中文乱码
mysqli_query($conn , "set names utf8");
$retval = mysqli_query($conn,$sql );
if(! $retval )
{
die('执行sql失败: ' . mysqli_error($conn));
}
else{
echo "执行sql成功\n";
}
//释放连接
mysqli_close($conn);
//
return mysqli_fetch_all($retval);
}
php实现上传图片并在数据库中记录图片信息
<html>
<head>
<meta charset="utf-8">
<title>upload homework</title>
</head>
<body>
<form action="upload_file.php" method="post" enctype="multipart/form-data">
<label for="file">文件名:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>
<?php
// 允许上传的图片后缀
function update_mysql($filename)
{
$nowtime = date('Y-m-d', time());
$sql = 'insert into upload (filename,date) values (' . '"' . "$filename" . '"' . ',' . '"' . $nowtime . '"' . ')' . ';';
mysql_con($sql);
}
function mysql_con($sql){
$mysql_name = 'localhost';
$mysql_user = 'root';
$mysql_pw = 'root';
$mysql_db = 'update';
$conn = mysqli_connect($mysql_name,$mysql_user,$mysql_pw,$mysql_db);
if(! $conn )
{
die('Could not connect: ' . mysqli_error());
}
echo '<p>数据库连接成功!</p>';
echo $nowtime;
//$sql = 'insert into upload (filename,date) values (' . '"' . "$filename" . '"' . ',' . '"' . $nowtime . '"'. ')' . ';';
$retval = mysqli_query($conn,$sql );
if(! $retval )
{
die('插入失败: ' . mysqli_error($conn));
}
else{
echo "插入成功\n";
}
mysqli_close($conn);
return mysqli_fetch_all($retval);
}
function list_book(){
$sql = 'select * from upload';
echo $sql;
$res = mysql_con($sql);
foreach($res as $key => $value){
echo "{$key}==>{$value}<br>";
}
}
function picture(){
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
echo $_FILES["file"]["size"];
$extension = end($temp); // 获取文件后缀名
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800) // 小于 200 kb
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "错误:: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";
// 判断当期目录下的 upload 目录是否存在该文件
// 如果没有 upload 目录,你需要创建它,upload 目录权限为 777
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " 文件已经存在。 ";
}
else
{
// 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
echo "文件存储在: " . "upload/" . $_FILES["file"]["name"];
$filename = $_FILES["file"]["name"];
echo $filename;
update_mysql($filename);
}
}
}
else
{
echo "非法的文件格式";
}
}
picture();
//list_book();
?>