PHP笔记

    技术2022-07-10  138

    PHP 是服务器端脚本语言。

    HelloWorld

    <!DOCTYPE html> <html> <body> <h1>My first PHP page</h1> <?php //php开始标志 echo "Hello World!"; ?> </body> </html>

    PHP基础

    变量

    以 $ 符号开始,后面跟着变量的名称,区分大小写。

    $x=5;

    作用域

    PHP 有四种不同的变量作用域:local,global,static,parameter。

    local:在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问。

    global:要在一个函数中访问一个全局变量,需要使用 global 关键字。

    <?php $x=5; $y=10; function myTest() { global $x,$y; $y=$x+$y; } myTest(); echo $y; // 输出 15 ?>

    static :函数销毁时不销毁该变量。

    parameter:参数。

    输出

    echo - 可以输出一个或多个字符串 print - 只允许输出一个字符串,返回值总为 1

    echo

    <?php echo "<h2>PHP 很有趣!</h2>"; echo "Hello world!<br>"; echo "我要学 PHP!<br>"; echo "这是一个", "字符串,", "使用了", "多个", "参数。"; ?>

    print

    <?php print "<h2>PHP 很有趣!</h2>"; print "Hello world!<br>"; print "我要学习 PHP!"; ?>

    EOF

    PHP 定界符 EOF 的作用就是按照原样,包括换行格式什么的,输出在其内部的东西;在 PHP 定界符 EOF 中的任何特殊字符都不需要转义;

    <?php echo <<<EOF <h1>我的第一个标题</h1> <p>我的第一个段落。</p> EOF; // 结束需要独立一行且前后不能空格 ?>

    数据类型

    String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型), Array(数组), Object(对象), NULL(空值)。

    常量

    设置常量,使用 define() 函数,函数语法如下:

    bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )

    该函数有三个参数:

    name:必选参数,常量名称,即标志符。value:必选参数,常量的值。case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。

    常量在定义后,默认是全局变量,可以在整个运行的脚本的任何地方使用。

    字符串

    在 PHP 中,只有一个字符串运算符。并置运算符 (.) 用于把两个字符串值连接起来。

    <?php $txt1="Hello world!"; $txt2="What a nice day!"; echo $txt1 . " " . $txt2; ?>

    strlen() 函数

    返回字符串的长度(字节数)。

    <?php echo strlen("Hello world!"); ?>

    strpos() 函数

    strpos() 函数用于在字符串内查找一个字符或一段指定的文本。

    <?php echo strpos("Hello world!","world"); ?>

    数组

    在 PHP 中,有三种类型的数组:

    数值数组 - 带有数字 ID 键的数组关联数组 - 带有指定的键的数组,每个键关联一个值多维数组 - 包含一个或多个数组的数组

    数值数组

    $cars=array("Volvo","BMW","Toyota"); $cars[0]="Volvo"; $cars[1]="BMW"; $cars[2]="Toyota"; $cars=array("Volvo","BMW","Toyota"); $arrlength=count($cars);//count() 获取数组长度 echo count($arrlength); for($x=0;$x<$arrlength;$x++) //遍历数组 { echo $cars[$x]; echo "<br>"; }

    关联数组

    $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43"); $age['Peter']="35"; $age['Ben']="37"; $age['Joe']="43"; foreach($age as $x=>$x_value) //遍历数组 { echo "Key=" . $x . ", Value=" . $x_value; echo "<br>"; }

    数组排序

    sort() - 对数组进行升序排列rsort() - 对数组进行降序排列asort() - 根据关联数组的值,对数组进行升序排列ksort() - 根据关联数组的键,对数组进行升序排列arsort() - 根据关联数组的值,对数组进行降序排列krsort() - 根据关联数组的键,对数组进行降序排列 <?php $cars=array("Volvo","BMW","Toyota"); sort($cars); ?>

    超级全局变量

    PHP 超级全局变量列表:

    $GLOBALS $_SERVER $_REQUEST $_POST $_GET $_FILES $_ENV $_COOKIE $_SESSION

    $GLOBALS

    $GLOBALS 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。

    <?php $x = 75; $y = 25; function addition() { $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; } addition(); echo $z; ?> 100

    $_SERVER

    $_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。

    <?php echo $_SERVER['PHP_SELF']; echo "<br>"; echo $_SERVER['SERVER_NAME']; echo "<br>"; echo $_SERVER['HTTP_HOST']; echo "<br>"; echo $_SERVER['HTTP_REFERER']; echo "<br>"; echo $_SERVER['HTTP_USER_AGENT']; echo "<br>"; echo $_SERVER['SCRIPT_NAME']; ?> /untitled/test.php PhpStorm 2020.1.2 localhost:63342 Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0 /untitled/test.php 元素/代码描述$_SERVER['PHP_SELF']当前执行脚本的文件名,与 document root 有关。例如,在地址为 http://example.com/test.php/foo.bar 的脚本中使用 $_SERVER['PHP_SELF']$_SERVER['GATEWAY_INTERFACE']服务器使用的 CGI 规范的版本;例如,"CGI/1.1"。$_SERVER['SERVER_ADDR']当前运行脚本所在的服务器的 IP 地址。$_SERVER['SERVER_NAME']当前运行脚本所在的服务器的主机名。如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定。(如: www.runoob.com)$_SERVER['SERVER_SOFTWARE']服务器标识字符串,在响应请求时的头信息中给出。 (如:Apache/2.2.24)$_SERVER['SERVER_PROTOCOL']请求页面时通信协议的名称和版本。例如,"HTTP/1.0"。$_SERVER['REQUEST_METHOD']访问页面使用的请求方法;例如,"GET", "HEAD","POST","PUT"。$_SERVER['REQUEST_TIME']请求开始时的时间戳。从 PHP 5.1.0 起可用。 (如:1377687496)$_SERVER['QUERY_STRING']query string(查询字符串),如果有的话,通过它进行页面访问。$_SERVER['HTTP_ACCEPT']当前请求头中 Accept: 项的内容,如果存在的话。$_SERVER['HTTP_ACCEPT_CHARSET']当前请求头中 Accept-Charset: 项的内容,如果存在的话。例如:"iso-8859-1,*,utf-8"。$_SERVER['HTTP_HOST']当前请求头中 Host: 项的内容,如果存在的话。$_SERVER['HTTP_REFERER']引导用户代理到当前页的前一页的地址(如果存在)。由 user agent 设置决定。并不是所有的用户代理都会设置该项,有的还提供了修改 HTTP_REFERER 的功能。简言之,该值并不可信。)$_SERVER['HTTPS']如果脚本是通过 HTTPS 协议被访问,则被设为一个非空的值。$_SERVER['REMOTE_ADDR']浏览当前页面的用户的 IP 地址。$_SERVER['REMOTE_HOST']浏览当前页面的用户的主机名。DNS 反向解析不依赖于用户的 REMOTE_ADDR。$_SERVER['REMOTE_PORT']用户机器上连接到 Web 服务器所使用的端口号。$_SERVER['SCRIPT_FILENAME']当前执行脚本的绝对路径。$_SERVER['SERVER_ADMIN']该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。如果脚本运行在一个虚拟主机上,则该值是那个虚拟主机的值。(如:someone@runoob.com)$_SERVER['SERVER_PORT']Web 服务器使用的端口。默认值为 "80"。如果使用 SSL 安全连接,则这个值为用户设置的 HTTP 端口。$_SERVER['SERVER_SIGNATURE']包含了服务器版本和虚拟主机名的字符串。$_SERVER['PATH_TRANSLATED']当前脚本所在文件系统(非文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果。$_SERVER['SCRIPT_NAME']包含当前脚本的路径。这在页面需要指向自己时非常有用。__FILE__ 常量包含当前脚本(例如包含文件)的完整路径和文件名。$_SERVER['SCRIPT_URI']URI 用来指定要访问的页面。例如 "/index.html"。

    \(\_REQUEST及\)_POST

    $_REQUEST 用于收集HTML表单提交的数据。 PHP $_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="post"。 以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)。 当用户通过点击 "Submit" 按钮提交表单数据时, 表单数据将发送至

    标签中 action 属性中指定的脚本文件。 在这个实例中,我们指定文件来处理表单数据。如果你希望其他的PHP文件来处理该数据,你可以修改该指定的脚本文件名。 然后,我们可以使用超级全局变量 $_REQUEST 来收集表单中的 input 字段数据: <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>

    $_GET

    PHP \(\_GET 同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="get"。 \)_GET 也可以收集URL中发送的数据。 假定我们有一个包含参数的超链接HTML页面:

    <html> <body> <a href="test_get.php?subject=PHP&web=runoob.com">Test $GET</a> </body> </html>

    循环

    for

    <?php for ($i=1; $i<=5; $i++) { echo "The number is " . $i . "<br>"; } ?> The number is 1 The number is 2 The number is 3 The number is 4 The number is 5

    foreach

    <?php $x=array("one","two","three"); foreach ($x as $value) { echo $value . "<br>"; } ?>

    函数

    语法:

    <?php function functionName() { // 要执行的代码 } ?>

    样例:

    <?php function add($x,$y) { $total=$x+$y; return $total; } echo "1 + 16 = " . add(1,16); ?>

    魔术常量

    __LINE__

    文件中的当前行号。

    <?php echo '这是第 " ' . \_\_LINE\_\_ . ' " 行'; ?>

    __FILE__

    文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。

    <?php echo '该文件位于 " ' . \_\_FILE\_\_ . ' " '; ?>

    __DIR__

    文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。

    <?php echo '该文件位于 " ' . \_\_DIR\_\_ . ' " '; ?>

    __FUNCTION__

    函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。

    <?php function test() { echo '函数名为:' . \_\_FUNCTION\_\_ ; } test(); ?>

    __CLASS__

    类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。

    <?php class test { function _print() { echo '类名为:' . \_\_CLASS\_\_ . "<br>"; echo '函数名为:' . \_\_FUNCTION\_\_ ; } } $t = new test(); $t->_print(); ?>

    __TRAIT__

    Trait 名包括其被声明的作用区域(例如 Foo\Bar)。

    <?php 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(); ?>

    __METHOD__

    类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。

    <?php function test() { echo '函数名为:' . \_\_METHOD\_\_ ; } test(); ?>

    __NAMESPACE__

    当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。

    <?php namespace MyProject; echo '命名空间为:"', \_\_NAMESPACE\_\_, '"'; // 输出 "MyProject" ?>

    命名空间

    命名空间必须是程序脚本的第一条语句.

    <?php declare(encoding='UTF-8'); //定义多个命名空间和不包含在命名空间中的代码 // 定义代码在 'MyProject' 命名空间中 namespace MyProject; // ... 代码 ... ?> <?php namespace MyProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } } namespace AnotherProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } } namespace { // 全局代码 session_start(); $a = MyProject\connect(); echo MyProject\Connection::start(); } ?>

    在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 declare 语句。所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前。

    <?php declare(encoding='UTF-8'); //定义多个命名空间和不包含在命名空间中的代码 namespace MyProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } } namespace { // 全局代码 session_start(); $a = MyProject\connect(); echo MyProject\Connection::start(); } ?>

    以下代码会出现语法错误:

    <html> <?php namespace MyProject; // 命名空间前出现了“<html>” 会致命错误 - 命名空间必须是程序脚本的第一条语句 ?>

    子命名空间及函数调用

    <?php namespace MyProject\Sub\Level; //声明分层次的单个命名空间 use My\Full\Classname as Another; //别名 const CONNECT_OK = 1; class Connection { /* ... */ } function Connect() { /* ... */ } \foo(); // 调用全局空间函数 "foo" my\foo(); // 调用定义在命名空间"A\my"中函数 "foo" ?>

    面向对象

    类的定义

    <?php class phpClass { var $var1; var $var2 = "constant string"; function myfunc ($arg1, $arg2) { [..] } [..] } ?>

    实例:

    <?php class Site { /* 成员变量 */ var $url; var $title; /* 成员函数 */ function setUrl($par){ $this->url = $par; } function getUrl(){ echo $this->url . PHP_EOL; } function setTitle($par){ $this->title = $par; } function getTitle(){ echo $this->title . PHP_EOL; } } $runoob = new Site; $taobao = new Site; $google = new Site; // 调用成员函数,设置标题和URL $runoob->setTitle( "菜鸟教程" ); $taobao->setTitle( "淘宝" ); $google->setTitle( "Google 搜索" ); $runoob->setUrl( 'www.runoob.com' ); $taobao->setUrl( 'www.taobao.com' ); $google->setUrl( 'www.google.com' ); // 调用成员函数,获取标题和URL $runoob->getTitle(); $taobao->getTitle(); $google->getTitle(); $runoob->getUrl(); $taobao->getUrl(); $google->getUrl(); ?>

    构造函数

    function \_\_construct( $par1, $par2 ) { $this->url = $par1; $this->title = $par2; }

    析构函数

    void \_\_destruct ( void )

    继承

    class Child extends Parent { // 代码部分 }

    重写

    访问控制

    public(公有),protected(受保护)或 private(私有)。

    接口

    接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。

    interface iTemplate { public function setVariable($name, $var); public function getHtml($template); }

    抽象类

    任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。

    abstract class AbstractClass { // 强制要求子类定义这些方法 abstract protected function getValue(); abstract protected function prefixValue($prefix); // 普通方法(非抽象方法) public function printOut() { print $this->getValue() . PHP_EOL; } }

    调用父类构造方法

    PHP 不会在子类的构造方法中自动的调用父类的构造方法。要执行父类的构造方法,需要在子类的构造方法中调用 parent::__construct() 。

    <?php class BaseClass { function __construct() { print "BaseClass 类中构造方法" . PHP_EOL; } } class SubClass extends BaseClass { function __construct() { parent::__construct(); // 子类构造方法不能自动调用父类的构造方法 print "SubClass 类中构造方法" . PHP_EOL; } } class OtherSubClass extends BaseClass { // 继承 BaseClass 的构造方法 } // 调用 BaseClass 构造方法 $obj = new BaseClass(); // 调用 BaseClass、SubClass 构造方法 $obj = new SubClass(); // 调用 BaseClass 构造方法 $obj = new OtherSubClass(); ?> BaseClass 类中构造方法 BaseClass 类中构造方法 SubClass 类中构造方法 BaseClass 类中构造方法
    Processed: 0.009, SQL: 9