php

 

lashes:斜线   stripslashes:去掉斜线     argument:参数    construct:构造    destruct:析构(销毁)

extends:继承   access:访问     variable:变量     constant:常量    convert:转换

interface:接口    implements:实现    abstract:抽象类    convention:惯例     extra:扩展        paginate:分页

 

thinkphp


 

依赖注入:向方法中注入一个对象参数,并自动实例化

class Demo1
{
    /**
     * \app\common\Temp: 类型限制,$temp参数必须是 \app\common\Temp类 的对象,并且会自动实例化
     */
    public function getMethod(\app\common\Temp $temp)
    {
        $temp->setName('PHP中文网');
        return $temp->getName();
    }
}

 

 

动态配置:对当前控制器或者是某个方法里边进行动态的配置设置

namespace app\index\controller;

class Index
{
    public function __construct()
    {
        config('before', 'beforeAction');
    }

    public function index()
    {
        config('indexAction', 'index');

        dump(config());
    }

    public function demo()
    {
       dump(config());
    }
}

  

 


 

 

接口类

接口是类的模板,类是对象的模板

方法在接口里边是不做具体的实现的

interface Person
{
    public function eat();
    public function sleep();
}

class Man implements Person
{
    public function eat()
    {
        echo '吃海鲜大餐...';
    }

    public function sleep()
    {
        echo '半夜睡觉....';
    }
}

class Woman implements Person
{
    public function eat()
    {
        echo '吃减法水果...';
    }

    public function sleep()
    {
        echo '9点睡觉....';
    }
}

class L
{
    public static function factory(Person $user)  //Person做为类型限制,必须是实现了Person接口的类的对象
    {
        return $user;
    }
}


$user = L::factory(new Woman());

$user->eat();
$user->sleep();

  

 

 

对象的复制是浅拷贝(地址传递,指向同一个内存,同一个值,这样省内存)
普通类型的变量复制是深拷贝(变量之间通过复制值来进行的)

class A
{
    public $age = 0;
    public $username = '';

    //对象属性
    public $obj = null;
}

$a = new A();

$b = $a;
//$b = clone $a;       //输出0    复制一份变量a的 值 ,给变量b

$b->age = 1;

var_dump($a->age);    //1

 

 

当不能访问(找不到)属性或方法的时候,程序先看下有没有对应魔术方法,来执行魔术方法

__set

__get

__isset

__unset

__call

__callStatic

__invoke

__toString

 

 

命名空间 + 类名 = 类文件的路径

imooc.php

<?php

namespace models;

class Imooc
{
    public function nice()
    {
        echo 'imooc nice';
    }
}

main.php

<?php

spl_autoload_register(function($className) {                 // $className 等于 models\Imooc
       require str_replace('\\', '/', $className . '.php');  // 把'\'替换为'/'在$className . '.php'里边
});

$imooc = new models\Imooc();

var_dump(
    $imooc
);

 

 

 

 

$this 等于类即将生成的对象,对象不能访问类里边的常量(故$this也不能),通过对象来调用类中的属性和方法
self 等于这个类,可通过self::访问他的常量,通过 类:: 来调用类中的常量

调用类中的属性和方法——对象(类外边)/$this(类里边);

调用类中的常量——类::(类外边)/self::(类里边)

 

class Compute {
    const ONE = 1;
    const TWO = self::ONE + 1;
    //const TWO = $this->ONE + 1   错误

    public $cpu = 'amd 4000';
}

var_dump(
    Compute::TWO
);

$compute = new Compute();
var_dump(
    $compute->cpu
);

 

静态属性或方法类常量:属于类(而不属于对象),外部通过 类名:: 调用,内部通过self:: 访问

class Person
{
    public static $hand = '手';
    public static $food = '脚';

    public $a = 1;            //a属于对象

    const TWO = 2;

    public static function work()
    {
        echo(self::$hand);    //手
        echo(self::TWO);      //2
      //echo(self::$a);       //错误,a属于对象,不属于类,不能用self::
      //echo($this->a);       //也错误,静态work()方法属于类,不属于对象,所以work()里边根本没有$this的上下文
    }

}

$person = new Person();

echo(Person::work());

parent:父类本身

self:类本身

this:类的对象

 

 

后期静态绑定

<?php

class A
{
    public static function who()
    {
        echo 'A类的who方法';
    }

    public static function test()
    {
        static::who();   //运行的时候,根据上下文来判断,这个static到底指向的是哪个类
    //self::who(); //结果输出:A类的who方法, self就是A这个类,不是B类 } } class B extends A { public static function who() { echo 'B类的who方法'; } } B::test(); //B类的who方法

 

 

 

heredoc 定义字符串:

<?php

$track_name = '海阔天空';
$band_name = 'Beyond';

$doc = <<< HEREDOC
$track_name: 好比你在DreamWeaver里做一个网页,在源代码里按一下回车,\r\n是给源代码回车换行。-$band_name
HEREDOC;

echo $doc; //海阔天空: 好比你在DreamWeaver里做一个网页,在源代码里按一下回车, 是给源代码回车换行。-Beyond

  

posted @ 2018-06-28 18:17  254980080  阅读(176)  评论(0编辑  收藏  举报