PHP基础学习记录以及使用PHP搭建 “最最简单” 的留言板
Posted 敲代码的xiaolang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP基础学习记录以及使用PHP搭建 “最最简单” 的留言板相关的知识,希望对你有一定的参考价值。
学习php前,应当对html和css有简单的基础了解,可以参考: HTML和CSS简单学习整理。安装环境的话windows可以参考: PHP——学前知识储备与环境选择。不过这里笔者是以linux为学习环境,linux的环境搭建参考: 从入坑到不放弃-----centos7系统软件安装方法及网站环境搭建。
本博文的重点在于语法学习和PHP表单,文件的处理
PHP基础语法(理解)
语法部分参考于菜鸟教程:https://www.runoob.com/php/php-syntax.html
PHP 脚本可以放在文档中的任何位置。
PHP 中的每个代码行都必须以分号结束。分号是一种分隔符,用于把指令集区分开来。
通过 PHP,有两种在浏览器输出文本的基础指令:echo 和 print。
PHP变量
<?php
$x=1;
$y=2;
$z=$x+$y;
echo $z;
?>//运行结果为3
PHP 变量规则:
变量以 $ 符号开始,后面跟着变量的名称
变量名必须以字母或者下划线字符开始
变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )
变量名不能包含空格
变量名是区分大小写的($y 和 $Y 是两个不同的变量)
PHP global 关键字
global 关键字用于函数内访问全局变量
<?php
$x=1;
$y=2;
function myTest()
{
global $x,$y;
$y=$x+$y;
}
myTest();
echo $y; // 输出 3
?>
//或者写成下面这样也可
/*<?php
$x=1;
$y=2;
function myTest()
{
$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
}
myTest();
echo $y;//输出 3
?>*/
Static 作用域
当一个函数完成时,它的所有变量通常都会被删除。如果希望某个局部变量不要被删除,请在第一次声明变量时使用 static 关键字
<?php
function myTest()
{
static $x=0;
echo $x;
$x++;
echo PHP_EOL; // 换行符
}
myTest();
myTest();
myTest();
?>//输出结果为 0, 1, 2
//该变量仍然是函数的局部变量。
echo 语句
<?php
$test1="冰冰雪聪明";
$test2="胖头鱼";
$bingbing=array("孩怕","咕咕","哒咩");
echo $test1;
echo "<br>";
echo "冰冰说 $test2 好吃";
echo "<br>";
echo "我有一点 {$bingbing[0]}";
?>
/*上述代码运行结果
冰冰雪聪明
冰冰说 胖头鱼 好吃
我有一点 孩怕
*/
PHP 定界符 EOF
PHP EOF是一种在命令行 shell 和程序语言里定义一个字符串的方法。
EOF 可以用任意其它字符代替,只需保证结束标识与开始标识一致。
<?php
$name="bingbing";
$a= <<<EOF
"wang"$name
"123456789"
EOF;
// 结束需要独立一行且前后不能空格
echo $a;
?>
/*
运行结果
"wang"bingbing
"123456789"
*/
整型
<?php
$x = 6666;
var_dump($x);
echo "<br>";
$x = -1; // 负数
var_dump($x);
echo "<br>";
$x = 0x2C; // 十六进制数
var_dump($x);
echo "<br>";
$x = 035; // 八进制数
var_dump($x);
?>
/*
PHP var_dump() 函数
var_dump() 函数用于输出变量的相关信息。
上面代码的运行结果
int(6666)
int(-1)
int(44)
int(29)
*/
浮点型
<?php
$x = 3.1415926;
var_dump($x);
echo "<br>";
$x = 1.1e2;
var_dump($x);
echo "<br>";
$x = 2E-5;
var_dump($x);
?>
/*
上面的代码运行结果
float(3.1415926)
float(110)
float(2.0E-5)
*/
NULL 值
NULL 值表示变量没有值。NULL 是数据类型为 NULL 的值。
<html>
<body>
<?php
$x="Hello world!";
$x=null;
var_dump($x);
?>
</body>
</html>
/*
运行结果为:NULL
*/
类型比较
松散比较:使用两个等号 == 比较,只比较值,不比较类型。
严格比较:用三个等号 === 比较,除了比较值,也比较类型。
常量
<?php
define("BINGBING", "不愧是我王冰冰");
function myTest()
{
echo BINGBING;
}
myTest(); // 输出 "不愧是我王冰冰"
?>
/*
上述的运行结果:不愧是我王冰冰
*/
字符串变量
<?php
$txt="Hello world!";
echo $txt;
?>
/*
输出为 Hello world!
*/
<?php
echo strlen("Hello world!");
?>
/*
strlen() 函数返回字符串的长度(字节数)
上面的代码将输出:12
*/
<?php
echo strpos("Hello world!","world");
?>
/*
上面的代码将输出:6
strpos() 函数用于在字符串内查找一个字符或一段指定的文本
*/
数组
<?php
$bingbing=array("i","love","bingbing");
echo $bingbing[0] . " " . $bingbing[1] . " " . $bingbing[2] . ".";
?>
/*
运行结果
i love bingbing.
*/
<?php
$bingbing=array("i ","love","bingbing");
echo count($bingbing);
?>
/*
获取数组的长度 - count() 函数
上面的代码运行结果为: 3
*/
关联数组
<?php
$age=array("bingbing"=>"18","Ben"=>"37","Joe"=>"43");
echo "bingbing is " . $age['bingbing'] . " years old.";
?>
/*
运行结果 :bingbing is 18 years old.
关联数组是使用分配给数组的指定的键的数组
*/
遍历关联数组
<?php
$age=array("bingbing"=>"18","xiaolang"=>"100","makabaka"=>"20");
foreach($age as $x=>$x_value)
{
echo "name=" . $x . ", old=" . $x_value;
echo "<br>";
}
?>
/*
运行结果:
name=bingbing, old=18
name=xiaolang, old=100
name=makabaka, old=20
遍历并打印关联数组中的所有值,使用 foreach 循环
*/
数组排序
参考链接:https://www.runoob.com/php/php-ref-array.html
sort() - 对数组进行升序排列
rsort() - 对数组进行降序排列
asort() - 根据关联数组的值,对数组进行升序排列
ksort() - 根据关联数组的键,对数组进行升序排列
arsort() - 根据关联数组的值,对数组进行降序排列
krsort() - 根据关联数组的键,对数组进行降序排列
<?php
$bingbing=array("c","b","a");
sort($bingbing);
print_r($bingbing);
?>
/*
运行结果
Array
(
[0] => a
[1] => b
[2] => c
)
对数组进行升序排列
*/
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
asort($age);
print_r($age);
?>
/*
上述代码运行结果: Array ( [Peter] => 35 [Ben] => 37 [Joe] => 43 )
*/
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
arsort($age);
?>
/*
运行结果:Array ( [Joe] => 43 [Ben] => 37 [Peter] => 35 )
arsort() - 根据数组的值,对数组进行降序排列
*/
超级全局变量
$GLOBALS
<?php
$x = 1;
$y = 2;
function addition()
{
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addition();
echo $z;
?>
/*
运行结果: 3
*/
$_REQUEST
用于收集HTML表单提交的数据。
<!DOCTYPE html>
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
<?php
$name = htmlspecialchars($_REQUEST['fname']);
echo $name;
?>
</body>
</html>
更多参考:https://www.runoob.com/php/php-superglobals.html
PHP实现冒泡排序
<?php
$arr = array(3,1,4,1,5,9,2,6);
for($i = count($arr)-1;$i>=0;$i--)
{
for($j = 0 ; $j < $i ; $j++)
{
if($arr[$j+1] > $arr[$j] )
{
$aa = $arr[$j+1];
$arr[$j+1] = $arr[$j];
$arr[$j] = $aa;
}
}
}
print_r($arr);
?>
运行结果:
函数
在 PHP 中,提供了超过 1000 个内建的函数,参考连接:https://www.runoob.com/php/php-ref-array.html
<?php
function writeName($fname,$punctuation)
{
echo $fname . " 皮卡皮卡" . $punctuation . "<br>";
}
echo "她的名字是 :";
writeName("冰冰",".");
echo "她的另一个名字 : ";
writeName("胖头鱼","!");
echo "她还有一个名字是 :";
writeName("吃花椒的喵酱","!!!");
?>
返回值
<?php
function add($x,$y)
{
$total=$x+$y;
return $total;
}
echo "1 + 2 = " . add(1,2);
?>
/*
运行结果:1 + 2 = 3
*/
命名空间
参考链接:https://www.php.net/manual/zh/language.namespaces.rationale.php
命名空间一个最明确的目的就是解决重名问题,命名空间将代码划分出不同的空间,每个空间的常量、函数、类的名字互不影响, 类似于‘封装’的概念。
<?php
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
namespace AnotherProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
?>
<?php
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
}
namespace { // 全局代码
session_start();
$a = MyProject\\connect();
echo MyProject\\Connection::start();
}
?>
/*
将全局的非命名空间中的代码与命名空间中的代码组合在一起,只能使用大括号形式的语法。全局代码必须用一个不带名称的 namespace 语句加上大括号括起来
*/
子命名空间
<?php
namespace MyProject\\Sub\\Level; //声明分层次的单个命名空间
const CONNECT_OK = 1;
class Connection { /* ... */ }
function Connect() { /* ... */ }
?>
/*
命名空间的名字可以使用分层次的方式定义
*/
命名空间使用
/*file1.php 文件代码*/
<?php
namespace Foo\\Bar\\subnamespace;
const FOO = 1;
function foo() {}
class foo
{
static function staticmethod() {}
}
?>
/*file2.php 文件代码*/
<?php
namespace Foo\\Bar;
include 'file1.php';
const FOO = 2;
function foo() {}
class foo
{
static function staticmethod() {}
}
/* 非限定名称 */
foo(); // 解析为函数 Foo\\Bar\\foo
foo::staticmethod(); // 解析为类 Foo\\Bar\\foo ,方法为 staticmethod
echo FOO; // 解析为常量 Foo\\Bar\\FOO
/* 限定名称 */
subnamespace\\foo(); // 解析为函数 Foo\\Bar\\subnamespace\\foo
subnamespace\\foo::staticmethod(); // 解析为类 Foo\\Bar\\subnamespace\\foo,
// 以及类的方法 staticmethod
echo subnamespace\\FOO; // 解析为常量 Foo\\Bar\\subnamespace\\FOO
/* 完全限定名称 */
\\Foo\\Bar\\foo(); // 解析为函数 Foo\\Bar\\foo
\\Foo\\Bar\\foo::staticmethod(); // 解析为类 Foo\\Bar\\foo, 以及类的方法 staticmethod
echo \\Foo\\Bar\\FOO; // 解析为常量 Foo\\Bar\\FOO
?>
命名空间和动态语言特征
PHP 命名空间的实现受到其语言自身的动态特征的影响,所以要动态访问命名部分的元素。
example1.php 文件代码:
<?php
class classname
{
function __construct()
{
echo __METHOD__,"\\n";
}
}
function funcname()
{
echo __FUNCTION__,"\\n";
}
const constname = "global";
$a = 'classname';
$obj = new $a; // prints classname::__construct
$b = 'funcname';
$b(); // prints funcname
echo constant('constname'), "\\n"; // prints global
?>
动态访问命名空间的元素
<?php
namespace namespacename;
class classname
{
function __construct()
{
echo __METHOD__,"\\n";
}
}
function funcname()
{
echo __FUNCTION__,"\\n";
}
const constname = "namespaced";
include 'example1.php';
$a = 'classname';
$obj = new $a; // 输出 classname::__construct
$b = 'funcname';
$b(); // 输出函数名
echo constant('constname'), "\\n"; // 输出 global
/* 如果使用双引号,使用方法为 "\\\\namespacename\\\\classname"*/
$a = '\\namespacename\\classname';
$obj = new $a; // 输出 namespacename\\classname::__construct
$a = 'namespacename\\classname';
$obj = new $a; // 输出 namespacename\\classname::__construct
$b = 'namespacename\\funcname'高级PHP开发:利用PHPEMS搭建在线考试平台