Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1873|回复: 1
打印 上一主题 下一主题

PHP 教程

[复制链接]

1272

主题

2067

帖子

7962

积分

认证用户组

Rank: 5Rank: 5

积分
7962
跳转到指定楼层
楼主
发表于 2020-4-13 15:26:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Qter 于 2020-4-13 16:22 编辑

https://www.runoob.com/php/php-tutorial.html
如果您的服务器不支持 PHP,您必须:
  • 安装 Web 服务器
  • 安装 PHP
  • 安装数据库,比如 MySQL
官方 PHP 网站(PHP.net)有 PHP 的安装说明: http://php.net/manual/en/install.php
      PHP 脚本以 <?php 开始,以 ?> 结束:
    变量以 $ 符号开始,后面跟着变量的名称
变量名是区分大小写的($y 和 $Y 是两个不同的变量)
PHP 是一门弱类型语言
不必向 PHP 声明该变量的数据类型。
PHP 会根据变量的值,自动把变量转换为正确的数据类型。
PHP 有四种不同的变量作用域:
local 局部作用域
global 全局作用域
static
parameter


要在一个函数中访问一个全局变量,需要使用 global 关键字。
PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。

tatic 作用域
当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。
要做到这一点,请在您第一次声明变量时使用 static 关键字


echo 和 print 区别:

echo - 可以输出一个或多个字符串
print - 只允许输出一个字符串,返回值总为 1
提示:echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。

PHP EOF(heredoc) 是一种在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序语言(像Perl、PHP、Python和Ruby)里定义一个字符串的方法。
$a= <<<EOF
        "abc"$name
        "123"
EOF;

PHP 5 数据类型
String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型), Array(数组), Object(对象), NULL(空值)。
PHP var_dump() 函数返回变量的数据类型和值:

PHP 对象
对象数据类型也可以用于存储数据。
在 PHP 中,对象必须声明。
首先,你必须使用class关键字声明类对象。类是可以包含属性和方法的结构。
然后我们在类中定义数据类型,然后在实例化的类中使用数据类型:
<?php
class Car
{
  var $color;
  function __construct($color="green") {
    $this->color = $color;
  }
  function what_color() {
    return $this->color;
  }
}
?>
可以通过设置变量值为 NULL 来清空变量数据:
$x=null;
PHP 类型比较
松散比较:使用两个等号 == 比较,只比较值,不比较类型。
严格比较:用三个等号 === 比较,除了比较值,也比较类型。
常量
常量值被定义后,在脚本的其他任何地方都不能被改变。 (常量名不需要加 $ 修饰符)。
设置常量,使用 define() 函数,函数语法如下:
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
该函数有三个参数:
name:必选参数,常量名称,即标志符。
value:必选参数,常量的值。
case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。
常量在定义后,默认是全局变量,可以在整个运行的脚本的任何地方使用。
PHP 并置运算符
在 PHP 中,只有一个字符串运算符。
并置运算符 (.) 用于把两个字符串值连接起来。
echo $txt1 . " " . $txt2;
strlen() 函数返回字符串的长度(字节数)。
strpos() 函数用于在字符串内查找一个字符或一段指定的文本。
如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE。
echo strpos("Hello world!","world");  之所以是 6 而不是 7 的原因是,字符串中第一个字符的位置是 0,而不是 1。
数组
在 PHP 中,有三种类型的数组: $cars=array("Volvo","BMW","Toyota"); (ID 键总是从 0 开始)
数值数组 - 带有数字 ID 键的数组
关联数组 - 带有指定的键的数组,每个键关联一个值
多维数组 - 包含一个或多个数组的数组
count() 函数用于返回数组的长度(元素的数量) echo count($cars);
遍历数值数组
$cars=array("Volvo","BMW","Toyota");
$arrlength=count($cars);

for($x=0;$x<$arrlength;$x++)
{
    echo $cars[$x];
    echo "<br>";
}
PHP 关联数组
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");

foreach($age as $x=>$x_value)
{
    echo "Key=" . $x . ", Value=" . $x_value;
    echo "<br>";
}
数组排序函数
sort() - 对数组进行升序排列
rsort() - 对数组进行降序排列
asort() - 根据关联数组的值,对数组进行升序排列
ksort() - 根据关联数组的键,对数组进行升序排列
arsort() - 根据关联数组的值,对数组进行降序排列
krsort() - 根据关联数组的键,对数组进行降序排列
$cars=array("Volvo","BMW","Toyota");
sort($cars);
PHP 超级全局变量
$GLOBALS
$GLOBALS 是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问。
$GLOBALS 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
$_SERVER
$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。
echo $_SERVER['SERVER_NAME'];
echo $_SERVER['HTTP_USER_AGENT'];
$_REQUEST
$_REQUEST 用于收集HTML表单提交的数据。
$name = $_REQUEST['fname'];
$_POST
$_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="post"。
$name = $_POST['fname'];
$_GET
$_GET 同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="get"。
$_GET 也可以收集URL中发送的数据。
echo "Study " . $_GET['subject'] . " @ " . $_GET['web'];
$_FILES
$_ENV
$_COOKIE
$_SESSION

foreach 循环
$x=array("one","two","three");
foreach ($x as $value)
{
    echo $value . "<br>";
}
PHP 函数
function add($x,$y)
{
    $total=$x+$y;
    return $total;
}
魔术常量
PHP 向它运行的任何脚本提供了大量的预定义常量。
__LINE__  文件中的当前行号。
__FILE__ 文件的完整路径和文件名
__DIR__ 文件所在的目录。
__FUNCTION__ 函数名称(PHP 4.3.0 新加)
__CLASS__ 类的名称(PHP 4.3.0 新加)
__TRAIT__ 实现了代码复用的一个方法
__METHOD__ 类的方法名(PHP 5.0.0 新加)
__NAMESPACE__ 当前命名空间的名称(区分大小写)

定义命名空间
// 定义代码在 'MyProject' 命名空间中  
namespace MyProject;  
局代码必须用一个不带名称的 namespace 语句加上大括号括起来
namespace { // 全局代码
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
namespace MyProject\Sub\Level;  //声明分层次的单个命名空间
命名空间使用
非限定名称,或不包含前缀的类名称,例如 $a=new foo();
限定名称,或包含前缀的名称,例如 $a = new subnamespace\foo();
完全限定名称,或包含了全局前缀操作符的名称,例如, $a = new \currentnamespace\foo();
使用命名空间:别名/导入
在PHP中,别名是通过操作符 use 来实现的.
类定义
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;
  }
}
变量 $this 代表自身的对象。
PHP_EOL 为换行符。

PHP 中创建对象
$runoob = new Site;
$runoob->setTitle( "菜鸟教程" );
$runoob->setUrl( 'www.runoob.com' );
$runoob->getTitle();
$runoob->getUrl();
PHP 构造函数
构造函数是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,在创建对象的语句中与 new 运算符一起使用。
void __construct ([ mixed $args [, $... ]] )
function __construct( $par1, $par2 ) {
   $this->url = $par1;
   $this->title = $par2;
}
析构函数
析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。
void __destruct ( void )
继承
PHP 使用关键字 extends 来继承一个类,PHP 不支持多继承,格式如下:
// 子类扩展站点类别
class Child_Site extends Site {
   var $category;

    function setCate($par){
        $this->category = $par;
    }

    function getCate(){
        echo $this->category . PHP_EOL;
    }
}
方法重写
如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
接口
使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。

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

接口中定义的所有方法都必须是公有,这是接口的特性。

要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。
常量
可以把在类中始终保持不变的值定义为常量。在定义和使用常量的时候不需要使用 $ 符号。
const constant = '常量值';
抽象类 abstract
任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。

定义为抽象的类不能被实例化。

被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。

继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。
Static 关键字
声明类属性或方法为 static(静态),就可以不实例化类而直接访问。

静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。

由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。

静态属性不可以由对象通过 -> 操作符来访问。
Final 关键字
PHP 5 新增了一个 final 关键字。如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。
调用父类构造方法
PHP 不会在子类的构造方法中自动的调用父类的构造方法。要执行父类的构造方法,需要在子类的构造方法中调用 parent::__construct() 。

回复

使用道具 举报

1272

主题

2067

帖子

7962

积分

认证用户组

Rank: 5Rank: 5

积分
7962
沙发
 楼主| 发表于 2020-4-16 14:21:41 | 只看该作者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-11-25 21:12 , Processed in 0.062950 second(s), 18 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表