PHP基础
2021/9/8 1:06:17
本文主要是介绍PHP基础,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
PHP基础
前言
发现PHP审计和利用的一些漏洞利用场景挺有意思的,来学习一下php基础内容,大部分概念和代码和Java或c++的差不多,挑些php独有的特性来做记录。
基础知识
超级全局变量
PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。
- $GLOBALS
- $_SERVER
- $_REQUEST
- $_POST
- $_GET
- $_COOKIE
- $_FILES
- $_ENV
- $_SESSION
$GLOBAL 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
<?php $x = 75; $y = 25; function addition() { $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; } addition(); echo $z; ?> //结果:100
$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;
<?php echo $_SERVER['PHP_SELF']; // /try/demo_source/demo_global_server.php echo "<br>"; echo $_SERVER['SERVER_NAME']; // runoob.com echo "<br>"; echo $_SERVER['HTTP_HOST']; // www.runoob.com echo "<br>"; echo $_SERVER['HTTP_REFERER']; //来由 echo "<br>"; echo $_SERVER['HTTP_USER_AGENT']; //浏览器 echo "<br>"; echo $_SERVER['SCRIPT_NAME']; // /try/demo_source/demo_global_server.php //另外$_SERVER对象还包括 SERVER_ADDR, SERVER_PROTOCOL ,REQUEST_METHOD..等属性 ?>
$_REQUEST 用于收集HTML表单提交的数据。
<html> <body> <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"> Name: <input type="text" name="fname"> <input type="submit"> </form> <?php $name = $_REQUEST['fname']; echo $name; ?> </body> </html>
$_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="post"
<html> <body> <!--页面post给自己--> <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"> Name: <input type="text" name="fname"> <input type="submit"> </form> <?php $name = $_POST['fname']; echo $name; ?> </body> </html>
$_GET 同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="get"。
$_GET 也可以收集URL中发送的数据
<html> <body> <a href="test_get.php?subject=PHP&web=runoob.com">Test $GET</a> </body> </html> //test_get.php <html> <body> <?php echo "Study " . $_GET['subject'] . " at " . $_GET['web']; ?> </body> </html>
魔术变量
有八个魔术常量它们的值随着它们在代码中的位置改变而改变。
_LINE__
文件中的当前行号。__FILE__
文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。__DIR__
文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。__FUNCTION__
函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。__CLASS__
类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。__NAMESPACE__
当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)__METHOD__
类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)
文件处理
<?php //打开文件 $file = fopen("welcome.txt", "r") or exit("Unable to open file!"); //Output a line of the file until the end is reached //是否到达文件末尾 while(!feof($file)) { echo fgets($file). "<br>"; //逐行读取文件 //echo fgetc($file); //逐字符读取 } //关闭文件 fclose($file); ?>
面向对象
定义类
<?php class phpClass { var $var1; var $var2 = "constant string"; function myfunc ($arg1, $arg2) { [..] } [..] } ?> $runoob = new phpClass; $runoob->getUrl();
构造函数
function __construct( $par1, $par2 ) { $this->url = $par1; $this->title = $par2; }
析构函数
析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。
<?php class MyDestructableClass { function __construct() { print "构造函数\n"; $this->name = "MyDestructableClass"; } function __destruct() { print "销毁 " . $this->name . "\n"; } } $obj = new MyDestructableClass(); ?>
接口
使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。
接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。
接口中定义的所有方法都必须是公有,这是接口的特性。
要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。
<?php // 声明一个'iTemplate'接口 interface iTemplate { public function setVariable($name, $var); public function getHtml($template); } // 实现接口 class Template implements iTemplate { private $vars = array(); public function setVariable($name, $var) { $this->vars[$name] = $var; } public function getHtml($template) { foreach($this->vars as $name => $value) { $template = str_replace('{' . $name . '}', $value, $template); } return $template; } }
抽象类
<?php abstract class AbstractClass { // 强制要求子类定义这些方法 abstract protected function getValue(); abstract protected function prefixValue($prefix); // 普通方法(非抽象方法) public function printOut() { print $this->getValue() . PHP_EOL; } } class ConcreteClass1 extends AbstractClass { protected function getValue() { return "ConcreteClass1"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass1"; } } class ConcreteClass2 extends AbstractClass { public function getValue() { return "ConcreteClass2"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass2"; } } $class1 = new ConcreteClass1; $class1->printOut(); echo $class1->prefixValue('FOO_') . PHP_EOL; $class2 = new ConcreteClass2; $class2->printOut(); echo $class2->prefixValue('FOO_') . PHP_EOL; ?>
这篇关于PHP基础的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-19php8的协程和hyperf的协程有什么区别?-icode9专业技术文章分享
- 2024-12-19php8 的fiber是什么?-icode9专业技术文章分享
- 2024-12-05怎么在php8,1 里面开启 debug?-icode9专业技术文章分享
- 2024-12-05怎么在php8,1 里面开启 debug?-icode9专业技术文章分享
- 2024-11-29使用PHP 将ETH账户的资产汇集到一个账户
- 2024-11-23怎么实现安卓+php 热更新方案?-icode9专业技术文章分享
- 2024-11-22PHP 中怎么实现判断多个值是否为空、null 或者为 false?-icode9专业技术文章分享
- 2024-11-11开源 PHP 商城项目 CRMEB 二次开发和部署教程
- 2024-11-09怎么使用php在kaufland平台刊登商品?-icode9专业技术文章分享
- 2024-11-05PHP的抽象类和接口是什么,有什么区别-icode9专业技术文章分享