php大法好

作者: wyude | 来源:发表于2017-03-29 11:19 被阅读0次
    • PHP 是服务器端脚本语言;
    • PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")是一种通用开源脚本语言;
    • PHP 文件可包含文本、HTML、JavaScript代码和 PHP 代码;
    • PHP 代码在服务器上执行,结果以纯 HTML 形式返回给浏览器?

    • php在win下环境配置:
      • 下载php
      • 添加环境变量
      • 开启php自带简易服务器(下载apache什么的太麻烦,我就是玩玩):
    php -S localhost:8000 -t 页面所在路径
    //在页面根目录运行
    php -S localhost:2001
    
    • 在目录中创建phptest.php
    <!DOCTYPE html>
    <html>
    <body>
    <?php
        echo("hollo world");
    ?>    
    </body>
    </html>
    
    • 浏览器验证:localhost:2001/phptest.php

    PHP 语法

    • PHP 脚本在服务器上执行,然后将纯 HTML 结果发送回浏览器。
    • PHP 脚本可以放在文档中的任何位置。
    • PHP 脚本以 <?php 开始,以 ?> 结束:
    <?php
    // PHP 代码
    ?>
    

    • php变量
      • 变量以 $ 符号开始,后面跟着变量的名称;
      • 变量名是区分大小写的($y 和 $Y 是两个不同的变量);
      • global关键字用于函数内访问全局变量,在函数内调用函数外定义的全局变量,我们需要在函数中的变量前加上global关键字;
      • PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量;
      • Static作用域
    <?php
    function myTest()
    {
    static $x=0;
    echo $x;
    $x++;
    }
    myTest();
    myTest();
    myTest();
    ?>
    
    • PHP 常量:使用 define() 函数,函数语法如下:
    bool define ( string $name , mixed $value [, bool $case_insensitive = false ] );
    

    该函数有三个参数:

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

    • PHP echo 和 print 语句
      • echo 可以输出一个或多个字符串;
      • print只允许输出一个字符串,返回值总为 1;
      • echo 输出的速度比 print 快, echo 没有返回值,print有返回值1

    • 组合比较符(php7+)<=>
      $a = $b <=> $c;//if $b<$c,$a=-1;if$b==$c,$a=0;if$b>$c,$a=1
    echo 1 <=> 1; // 0
    echo 1 <=> 2; // -1
    echo 2 <=> 1; // 1
    

    • =>->::
      • =>
    用在php数组键名与元素的连接符,如:
    $arr = array(
    'a'=>'123',
    'b'=>'456'
    );
    foreach($arr as $key=>$val){
    //$key是数组键名
    //$val是数组键名对应的值
    }
    
    • ->:类似于C中对象对属性的引用;
    • ::: 在PHP中::这个叫范围解析操作符,又名域运算符。像C++的::类范围操作符。php调用类的内部静态成员,或者是类之间调用就要用。

    • PHP 超级全局变量
      • PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用。
        • $GLOBALS
        • $_SERVER
        • $_REQUEST
        • $_POST
        • $_GET
        • $_FILES
        • $_ENV
        • $_COOKIE
        • $_SESSION
        • PHP_EOL 为换行符

    • PHP 魔术变量
      • 有八个魔术常量它们的值随着它们在代码中的位置改变而改变。
        • __LINE__
        • __FILE__
        • __DIR__
        • __FUNCTION__
        • __CLASS__
        • __TRAIT__
        • __METHOD__
        • __NAMESPACE__

    • PHP 命名空间(namespace)
      • PHP 命名空间可以解决以下两类问题:
        • 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
        • 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。
      • 如果一个文件中包含命名空间,它必须在其它所有代码之前声明
    < ?php  
    // 定义代码在 'MyProject' 命名空间中  
    namespace MyProject;  
    // ... 代码 ...  
    
    • 也可以在同一个文件中定义不同的命名空间代码,如:
    < ?php  
    namespace MyProject1;  
    // MyProject1 命名空间中的PHP代码  
    namespace MyProject2;  
    // MyProject2 命名空间中的PHP代码    
    // 另一种语法
    namespace MyProject3 {  
     // MyProject3 命名空间中的PHP代码    
    }  
    ?>  
    
    • 在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 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();
    }
    ?>
    
    • 子命名空间
      • 与目录和文件的关系很象,PHP 命名空间也允许指定层次化的命名空间的名称。因此,命名空间的名字可以使用分层次的方式定义:
    <?php
    namespace MyProject\Sub\Level;  //声明分层次的单个命名空间
    const CONNECT_OK = 1;
    class Connection { /* ... */ }
    function Connect() { /* ... */  }
    ?>
    上面的例子创建了常量 MyProject\Sub\Level\CONNECT_OK,
    类 MyProject\Sub\Level\Connection 
    函数 MyProject\Sub\Level\Connect
    
    • 使用命名空间:别名/导入
      • 使用use操作符导入/使用别名
    <?php
    namespace foo;
    use My\Full\Classname as Another;
    // 下面的例子与 use My\Full\NSname as NSname 相同
    use My\Full\NSname;
    // 导入一个全局类
    use \ArrayObject;
    $obj = new namespace\Another; // 实例化 foo\Another 对象
    $obj = new Another; // 实例化 My\Full\Classname 对象
    NSname\subns\func(); // 调用函数 My\Full\NSname\subns\func
    $a = new ArrayObject(array(1)); // 实例化 ArrayObject 对象
    // 如果不使用 "use \ArrayObject" ,则实例化一个 foo\ArrayObject 对象
    ?>
    
    - 一行中包含多个use语句
    
    <?php
    use My\Full\Classname as Another, My\Full\NSname;
    $obj = new Another; // 实例化 My\Full\Classname 对象
    NSname\subns\func(); // 调用函数 My\Full\NSname\subns\func
    ?>
    
     - 卧槽,太多了,先不看命名空间这部分了。
    

    • php面向对象
      • 类内变量使用 var 来声明, 变量也可以初始化值;
      • 构造函数void __construct ([ mixed $args [, $... ]] )
    function __construct( $par1, $par2 ) {
       $this->url = $par1;
       $this->title = $par2;
    }
    
    - 析构函数`void __destruct ( void )`当对象结束其生命周期时,系统自动执行析构函数。
    
    <?php
    class MyDestructableClass {
       function __construct() {
           print "构造函数\n";
           $this->name = "MyDestructableClass";
       }
       function __destruct() {
           print "销毁 " . $this->name . "\n";
       }
    }
    $obj = new MyDestructableClass();
    ?>
    
    - 继承
    

    PHP 使用关键字extends 来继承一个类,PHP 不支持多继承

    class Child extends Parent {
       // 代码部分
    }
    
    - 方法重写
    

    如果从父类继承的方法不能满足子类的需求,可以对其进行改写,
    这个过程叫方法的覆盖(override),也称为方法的重写
    - 访问控制
    PHP 对属性或方法的访问控制,是通过在前面添加关键字
    public(公有),protected(受保护)或 private(私有)来实现的。
    默认公有。
    - 接口
    使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。
    接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。
    接口中定义的所有方法都必须是公有,这是接口的特性。
    要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。

    <?php
    // 声明一个'iTemplate'接口
    interface iTemplate{
    }
    // 实现接口
    class Template implements iTemplate{
    }
    
    - 常量
    

    可以把在类中始终保持不变的值定义为常量。在定义和使用常量的时候不需要使用 $ 符号。
    常量的值必须是一个定值,不能是变量,类属性,数学运算的结果或函数调用。
    自 PHP 5.3.0 起,可以用一个变量来动态调用类。但该变量的值不能为关键字(如 self,parent 或 static)。

    <?php
    class MyClass
    {
        const constant = '常量值';
        function showConstant() {
            echo  self::constant . PHP_EOL;
        }
    }
    echo MyClass::constant . PHP_EOL;
    $classname = "MyClass";
    echo $classname::constant . PHP_EOL; // 自 5.3.0 起
    $class = new MyClass();
    $class->showConstant();
    echo $class::constant . PHP_EOL; // 自 PHP 5.3.0 起
    ?>
    
    - 抽象类
    

    任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。
    定义为抽象的类不能被实例化。
    被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
    继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)

    <?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";
        }
    }
    
    - Static 关键字
    

    声明类属性或方法为 static(静态),就可以不实例化类而直接访问。
    静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。
    由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。
    静态属性不可以由对象通过 -> 操作符来访问。
    自 PHP 5.3.0 起,可以用一个变量来动态调用类。但该变量的值不能为关键字 self,parent 或 static

    <?php
    class Foo {
      public static $my_static = 'foo';
      public function staticValue() {
         return self::$my_static;
      }
    }
    print Foo::$my_static . PHP_EOL;
    $foo = new Foo();
    print $foo->staticValue() . PHP_EOL;
    ?>
    
    - Final 关键字
    

    PHP 5 新增了一个 final 关键字。如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。
    - 调用父类构造方法
    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();
    ?>
    

    • 表单验证
      • 应该在任何可能的时候对用户输入进行验证(通过客户端脚本)。浏览器验证速度更快,并且可以减轻服务器的负载。
      • 如果用户输入需要插入数据库,您应该考虑使用服务器验证。在服务器验证表单的一种好的方式是,把表单传给它自己,而不是跳转到不同的页面。这样用户就可以在同一张表单页面得到错误信息。用户也就更容易发现错误了。

    • htmlspecialchars
      htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体
    预定义的字符是:
    & (和号) 成为 &amp;
    " (双引号) 成为 &quot;
    ' (单引号) 成为 &#039;
    < (小于) 成为 &lt;
    > (大于) 成为 &gt;
    

    • PHP includerequire 语句
      • includerequire 语句用于在执行流中插入写在其他文件中的有用的代码。
      • includerequire 除了处理错误的方式不同之外,在其他方面都是相同的:
        • require 生成一个致命错误(E_COMPILE_ERROR),在错误发生后脚本会停止执行。
        • include 生成一个警告(E_WARNING),在错误发生后脚本会继续执行。
      • 包含文件省去了大量的工作。这意味着您可以为所有网页创建标准页头、页脚或者菜单文件。然后,在页头需要更新时,您只需更新这个页头包含文件即可。
    include 'filename';
    或者
    require 'filename';
    

    相关文章

      网友评论

        本文标题:php大法好

        本文链接:https://www.haomeiwen.com/subject/fbreottx.html