PHP - 一套足够前端开发工程师使用的PHP知识点(持续更新)
“工欲善其事,必先利其器”
本文仅记录这位菜鸟在工作中遇到的知识点。欢迎您随时补充!
1. PHP初识
首先,什么是PHP? PHP 能做什么?
2.MVC初介
与前端所熟知的MVVM不同,MVC的全称是View,是模型()-视图(视图)-控制器()的缩写。这是一种使用“模型-视图-控制器”设计创建 Web 应用程序的方法。模式,它还提供对 HTML、CSS 和 .它是一种软件设计范例。
那么这种编程模型有什么优点呢?
3. 内存初介
PHP 的内存有四个分区。
1. 堆栈区
程序的可操作部分。这里,PHP不存储数据,只运行程序代码。它的空间虽小,但运行速度却很快。避免无限循环,需要及时释放。
2.代码段区
这里没有任何操作,只存储你的PHP程序代码。其空间较小,必须避免出现多个程序代码,并需要及时释放。
3.数据段区
存储PHP常用数据类型的一些数据,分为全局区和静态区。您拥有的空间宽敞且高效。
4.堆区
存储复杂的PHP数据类型需要较大的空间但效率较低。
四、安装与使用
如果你想在服务器端使用 PHP:
找到一个支持PHP的主机,就可以愉快的写代码了。服务器会自动解析这些PHP文件;如果服务器不支持PHP,则需要安装Web服务器(,),然后安装PHP。
如果您想在本地计算机上使用 PHP:
建议安装。它是一个环境集成软件,包括、、、、ftp;将您的PHP代码挂载到网站域名对应的文件夹中。打开后可以通过浏览器在本地进行浏览和调试。 5. 语法
有两种情况。第一种情况是在原生PHP文件中写入:
PHP 脚本在服务器上执行,并将纯 HTML 结果返回到浏览器,因此 PHP 脚本可以放置在文档中的任何位置。
// PHP代码 ?>
原生 PHP 文件通常包含 HTML 标签和一些 PHP 脚本代码。例如我们输出一个:
<!DOCTYPE html> <html> <body> <h1>My first PHP page</h1> <?php echo "Hello World!"; ?> </body> </html>
第二种情况是PHP框架的模板文件中的书写语法:
由于PHP框架一般都遵循上面提到的MVC设计范式(比如框架),所以有时候我们需要将PHP代码输出到HTML文件中,就需要用下面的语法来编写:
{php} // PHP代码 {/php}
例如,要通过HTML标签来判断文本输出,我们可以这样写:
{foreach name="list" item="vo" key="k" } <tr > <td> {switch name="vo.gender" } {case value="0"}未知{/case} {case value="1"}男{/case} {case value="2"}女{/case} {/switch} td> tr> {/foreach}
6. 变量
同样,PHP是弱类型语言,这意味着某些变量可能会以与第一个定义的数据类型不同的数据类型输出,并且不会报错:
$a = 8; $b = "123"; $a = $b; echo $a; // 输出 “123” ?>
同样,PHP变量可以提前声明但不赋值,也可以立即声明并立即使用。在上面的示例中,PHP 变量需要以 $ 符号开头,后跟变量的名称。命名规则基本相同。
7. 数据类型
第一种,简单数据类型:
第二种,复合数据类型:
第三种,特殊数据类型:
8. 范围
PHP 有四种不同的变量作用域,即:
本地作用域和全局作用域互不干扰,不能互相访问。如果要在局部范围内访问全局变量,则需要关键字:
$a = 123; function test() { global $a; echo $a; } test(); // 输出 123 ?>
另外,PHP将所有全局变量存储在名为$[]的数组中,保存变量的名称。该数组可用于更新全局变量:
$a = 123; function test() { $GLOBALS['a'] = $GLOBALS['a'] + 1; } test(); echo $a; // 输出 124 ?>
为什么称为静态作用域?因为当函数完成时,它的所有变量都会被删除。如果您希望局部变量不被删除,请使用关键字声明局部变量。该函数类似于闭包:
function test() { static $a = 0; echo $a; $a++; } test(); test(); test(); // 依次输出:0,1,2 而不是每次都输出 0 ?>
需要注意的是,它仍然是局部变量,外部无法访问。
9. 输出 10. 类型比较
与此一致,弱类型比较包括松散比较和严格比较:
11. 常量
Class Person { const NAME = "张三"; public function myName() { echo "我是".self::NAME; } } echo Person::NAME; // 输出张三 $p1 = new Person(); $p1 -> myName(); // 输出 我是张三 ?>
12. 魔法常数
与 PI 常量一样,PHP 也有一些预定义常量。你可以把它理解为一个全局常数。
在输出文件中,当前行号:
echo '这是第' . __LINE__ . '行'; ?>
输出当前文件位置的完整文件名。如果在包含的文件中使用,则返回包含的文件名:
echo '该文件位于'. __FILE__ . '文件中'; ?>
输出当前文件所在目录。如果在包含文件中使用,则返回包含文件所在的目录名:
echo '该文件位于'. __DIR__ . '目录中'; ?>
定义时输出函数的名称:
function test() { echo '函数名为'. __FUNCTION__ ; } test(); ?>
输出类定义时的名称:
class test {
function _print() {
echo '类名为:' . __CLASS__ . "
";
echo '函数名为:' . __FUNCTION__ ; // 如果有这个,则输出该类声明的作用域下对应的,函数名称
}
}
$t = new test(); // test
$t->_print(); // _print
?>
用于声明一个可以合并到其他父类中的子类:
class Base { public function sayHello() { echo 'Hello '; } } trait sayWorld { public function sayHello() { parent::sayHello(); // 调用父类的方法 echo 'World'; } } class MyHelloWorld extends Base { use sayWorld; } $o = new MyHelloWorld(); $o -> sayHello(); // 输出 Hello World ?>
注意:从基类继承的成员将被插入类中的方法覆盖。其行为类中定义的方法是一致的。优先顺序是当前类中的方法覆盖方法,而当前类中的方法又覆盖基类中的方法。
输出类中的方法名:
function _print() {}
class test {
function _print() {
echo '类名为:' . __CLASS__ . "
";
echo '函数名为' . __METHOD__ ;
}
}
$t = new test();
$t->_print(); // 输出 test::_print
?>
输出当前命名空间的名称:
namespace MyProject; echo '命名空间为:"', __NAMESPACE__, '"'; // 输出 "MyProject" ?>
13.超级全局变量
与上面的常量不同,与变量类似,PHP 有一些全局变量。
是一个包含所有变量的全局组合数组。变量的名称是数组的键。
$x = 75; $y = 25; function addition() { $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; } addition(); echo $z; // 输出 100 ?>
是一个数组,包含头信息()、路径(path)、脚本位置()等信息。该数组中的项目由 Web 服务器创建。不保证每个服务器都会提供所有物品;服务器可能会忽略某些项目,或提供此处未列出的项目。
echo $_SERVER['PHP_SELF']; // /try/demo_source/demo_global_server.php
echo "
";
echo $_SERVER['SERVER_NAME']; // www.csdn.net
echo "
";
echo $_SERVER['HTTP_HOST']; // www.csdn.net
echo "
";
echo $_SERVER['HTTP_USER_AGENT']; // Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
echo "
";
echo $_SERVER['SCRIPT_NAME']; // /try/demo_source/demo_global_server.php
?>
用于收集HTML表单提交的数据。
<html> <body> <form method="post" action="$_SERVER['PHP_SELF'];?>"> Name: <input type="text" name="fname"> <input type="submit"> </form> <?php $name = $_REQUEST['fname']; echo $name; ?> </body> </html>
它广泛用于收集表单数据。在HTML表单标签中指定该属性:“=”post”。它也可以用于收集AJAX post数据。
<html> <body> <form method="post" action="$_SERVER['PHP_SELF'];?>"> Name: <input type="text" name="fname"> <input type="submit"> </form> <?php $name = $_POST['fname']; echo $name; ?> </body> </html>
它还广泛用于收集表单数据。在HTML表单标签中指定该属性:“=”get”。$_GET也可以收集URL中发送的数据。
<html> <body> <a href="test_get.php?subject=PHP&web=csdn.net">Test $GET</a> </body> </html> <?php echo "Study " . $_GET['subject'] . " @ " . $_GET['web']; ?>
常用于识别用户。它是服务器留在用户计算机上的一个小文件。每当同一台计算机通过浏览器请求页面时,该计算机都会发送它。使用 PHP,您可以创建和检索值。
setcookie("user", "csdn", time()+3600); ?> <html> .....
需要注意的是,函数必须放在HTML标签之前。
检索并删除:
// 输出 cookie 值 echo $_COOKIE["user"]; // 查看所有 cookie print_r($_COOKIE); ?> // 设置 cookie 过期时间为过去 1 小时,即可删除 setcookie("user", "", time()-3600);
PHP 变量用于存储有关用户 () 的信息,或更改用户 () 的设置。变量存储单个用户的信息,并且可供应用程序中的所有页面使用。它经常被用作计数器。
session_start(); if(isset($_SESSION['views'])) { $_SESSION['views']=$_SESSION['views']+1; } else { $_SESSION['views']=1; } echo "浏览量:". $_SESSION['views']; ?>
关于销毁方法:
session_start(); if(isset($_SESSION['views'])) { unset($_SESSION['views']); // unset() 函数用于释放指定的 session 变量 } session_destroy(); // 该函数彻底销毁 session ?>
14. 数组