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搭建在线考试平台

PHP从基础语法到原生项目开发

[从0开始]PHP+phpstudy留言板项目搭建教程及报错详析

PHP自学,第一阶段,基础学习

PHP代码审计入门-DVWA靶场暴力破解篇

零基础到精通,新手应该如何学习 PHP 语言?