爱情越久越不能忍受恋人缺点?

小说:爱情越久越不能忍受恋人缺点?作者:陵开邓更新时间:2019-03-25字数:29029

悟空施展玄空法秘诀,寻了缺口出来,刚从阵中探出头,只听一个熟悉的声音道:“顽劣之徒,还要我来降你!”

挽回?放手?我还能怎么办?

与此同时,就在叶扬进入到那山洞中不久,一道身影也是来到了这山洞的洞口。
风魂这才放下心来,又替她拭去脸上的泪水,说道:“我们先回去。”

倭寇之乱对边地的掠夺确实严重,随着京城物资的不停送达,边地的百姓终于可以重新过上安稳的日子,而此时林风站在水边,看着翻滚的水浪,他在想什么。

介绍

印象中只有java代码才会用到一大堆的import,当初看到后一脸懵逼并对php心生自豪:还是我大php牛逼够简洁,殊不知php也有命名空间这一说,这些年用的越来越多。那么,为什么要搞那么麻烦呢?得写一大堆的use(神烦。。。一脸无奈),php手册给出了标准答案:

在PHP中,命名空间用来解决在编写类库或应用程序时创建可重用的代码如类或函数时碰到的两类问题: 

  1. 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突
  2. 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。

好吧,换成二狗能理解的说法那就是:

  1. 解决命名冲突
  2. 重命名

其实就是一个意思:有了它可以更加自由地命名,而不用担心冲突

 

 

举个栗子

<?php
namespace my; //定义命名空间

//覆盖php类
class mysqli { public function query(){ return 1; } }
//覆盖php函数
function preg_replace_callback() { return 2; }
//覆盖php常量
const PHP_SAPI = 3; $a = new mysqli(); var_dump($a->query()); $b = preg_replace_callback(); var_dump($b); var_dump(PHP_SAPI); ?>

可以看到妥妥地返回了1,2,3:

int(1) int(2) int(3)

那么问题来了,现在我要用php的mysqli怎么办?最前面加上就好了:

$a = new mysqli;

 

我们在项目中遇到最多的情况是有两个同名的类库或方法而造成的冲突。假设有A,B两个第三方类库,它们都有Cache类,我要同时使用到他们两个:

├─application
│ ├─A
│ │ ├─Cache.php
│ ├─B
│ │ ├─Cache.php
│ ├─test.php

 

A/Cache.php:

<?php
namespace A;
class Cache{
    function set(){
        return "ok";
    }
}
?>

B/Cache.php:

<?php
namespace B;
class Cache{
    function set(){
        return "success";
    }
}
?>

test.php:

<?php
require "a/Cache.php";
require "b/Cache.php";

$cache = new ACache();
var_dump($cache->set());

$cache = new BCache();
var_dump($cache->set());
?>

返回:

string(2) "ok" string(7) "success"

 可以看到只要他两的命名空间不同,那么就可以正确调用到

 

namespace和__NAMESPACE__

__NAMESPACE__返回当前命名空间字符串,namespace关键字可以用来显式访问当前命名空间或子命名空间中的元素

$classname = __NAMESPACE__."mysqli";
$a = new $classname();
var_dump($a->query);

$a = new namespacemysqli();
var_dump($a->query());

 

use

use关键字就是用来指定使用哪个命名空间的,上面的例子我们没有使用到use是因为我们new的时候指定了路径,这样多麻烦呀,test.php改成使用use:

<?php
use ACache;
require "a/Cache.php";
require "b/Cache.php";

$cache = new Cache(); //new ACache
var_dump($cache->set());
$cache = new BCache(); //new BCache var_dump($cache->set()); ?>

这样每次new Cache就默认是实例化了ACache了,又可以早点回去和女票钻被窝了~

 

use as可以指定别名,当某个类库命名空间很长的时候就可以as一个短名称来偷个懒了,考虑类库代码如下:

<?php
namespace BlahBlahBlah;
class CacheSomeThingImportingAndVeryDangerous{
    function set(){
        return "success";
    }
}
?>

天呐,这么长的方法名,整个人都不好了,use as一下,整个世界都安静了:

<?php
use BlahBlahBlahCacheSomeThingImportingAndVeryDangerous as Cache;
require "B/CacheSomeThingImportingAndVeryDangerous.php";

$cache = new Cache();
var_dump($cache->set());
?>

 

以上!提前祝大家新年快乐!

 

编辑:辛海成

发布:2019-03-25 05:51:24

当前文章:http://ayzwzx.cn/ask/question_42508.html

为喜欢的事早起一个小时 孩子早恋的父母们应该读的一篇美文:柳眉儿落了 谈早恋与儿童的异性交往 释玄斋罗李华讲解请符需知 【情感问答】借男友的钱要还吗 罗李华谈:属猪的人2016年运程 一骑绝尘---论陈晓、陈妍希爱情 一个城市文化败笔的反思

33399 38449 44533 65344 52729 99638 17871 99617 50976 93495 92362 78024 29394 29593 84991 39722 81368 77159 61499 75463

我要说两句: (0人参与)

发布