国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP Q&A

mikasa / 576人閱讀

摘要:有哪些作用域函數(shù)作用域類作用域函數(shù)作用域是什么函數(shù)體是一個(gè)局部作用域函數(shù)體中無(wú)法直接訪問(wèn)外部全局變量,必須通過(guò)才能訪問(wèn)外部全局變量無(wú)法訪問(wèn)通知錯(cuò)誤正確訪問(wèn)外部全局變量無(wú)法訪問(wèn)函數(shù)體中可以直接訪問(wèn)常量輸出函數(shù)體中可以直接訪問(wèn)類靜態(tài)屬性靜態(tài)方法

PHP 有哪些作用域?

函數(shù)作用域

類作用域

PHP 函數(shù)作用域是什么?

函數(shù)體是一個(gè)局部作用域

函數(shù)體中無(wú)法直接訪問(wèn)外部全局變量,必須通過(guò)global/$GLOBALS才能訪問(wèn)外部全局變量

$var = "aa";
function showVar(){
    echo $var; //無(wú)法訪問(wèn)
}
showVar(); //Notice通知錯(cuò)誤

//正確訪問(wèn)外部全局變量
$var = "aa";
function showVar(){
    echo $GLOBALS["var"]; //無(wú)法訪問(wèn)
}
showVar();

函數(shù)體中可以直接訪問(wèn)常量

define("BBO","wutao");
function showVar(){
    echo BBO;
}
showVar();//輸出‘wutao’

函數(shù)體中可以直接訪問(wèn)(靜態(tài)屬性、靜態(tài)方法)和對(duì)象(屬性、方法)

function showVar(){
    $person = new Person();
    $person->getName();
    Person::getAge();
}

class Person{
    private $name = "不懂撒的";
    public static $age = 200;
        
    public function getName(){
        echo $this->name;
    }
        
    public static function getAge(){
        echo self::$age;
    }
}
    
showVar();
類作用域是什么?有什么注意事項(xiàng)?

類其實(shí)就是一個(gè)完整且獨(dú)立的個(gè)體,外部(變量與函數(shù))可以直接使用它

//定義一個(gè)Person類
class Person{

};
外部變量直接訪問(wèn)類中靜態(tài)方法/屬性與實(shí)例化
$var = new Person();
$var1 = Person::test();
//函數(shù)內(nèi)部也是直接訪問(wèn)類中靜態(tài)方法/屬性并使用
function demo(){
    $var1 = Person::test();
    $var = new Person();
}

在類中,方法可以直接調(diào)用外部函數(shù)或其他類,但不可以直接訪問(wèn)外部變量,外部常量(超全局常量)可以任何地方訪問(wèn)

在類中,屬性可以直接訪問(wèn)外部常量(超全局常量),但外部函數(shù)、外部變量,其他類就無(wú)法訪問(wèn)

$var = "121";
function fn(){}
class Student{}
define("CONF","121");

class Person{
    public $one = new Student(); //不正確,無(wú)法訪問(wèn)
    public $two = fn(); //不正確,無(wú)法訪問(wèn)
    public $three = $var; //不正確,無(wú)法訪問(wèn)
    public $four = CONF; //正確,可以訪問(wèn)
}
PHP 常量有哪些?各自有什么特點(diǎn)?常量取值類型有哪幾種?

超全局常量系統(tǒng)內(nèi)置超全局變量/常量用法一樣

//定義超全局常量,無(wú)論在函數(shù),方法,還是外部定義,只要定義,此常量都是超全局常量,哪都可以直接使用
define("BOSS","wt"); 

function showVar(){    
    echo BOSS;
    $person = new Person();
    $person->getName();
    Person::getAge();
}

class Person{
    private $name = BOSS;   //wt
    public static $age = BOSS;   //wt
        
    public function getName(){
        echo BOSS;   //wt
        echo $this->name;  //wt
    }
        
    public static function getAge(){
        echo self::$age;  //wt
        echo BOSS;        //wt
    }
}
    
showVar();

類中常量

function showVar(){
    $person = new Person();
    $person->getName();
    Person::getAge();
    echo Person::BMM;   //外部調(diào)用類常量
}

class Person{
    const BMM = "xiaomi";
    private $name = self::BMM;  //輸出xiaomi
    public static $age = self::BMM;  //輸出xiaomi
        
    public function getName(){
        echo $this->name;  //輸出xiaomi
    }
        
    public static function getAge(){
        echo self::BMM;  //內(nèi)部調(diào)用類常量
        echo self::$age;  //輸出xiaomi
    }
}
    
showVar();

常量類型
boolean/integer/float/string 四種類型之一,不能是其他類型

PHP 變量種類有哪些?各自有什么特點(diǎn)

外部全局變量 $var = "string"; 除4種基本類型,還可以數(shù)組/對(duì)象/null數(shù)據(jù)類型;
外部全局變量的特點(diǎn):函數(shù)中要用過(guò)global/$GLOBALS才能訪問(wèn)到外部全局變量(一般不推薦這樣使用),類中(方法和屬性)都無(wú)法直接訪問(wèn)外部全局變量

靜態(tài)變量 在函數(shù)中定義的一種變量; static $a = 0;
靜態(tài)變量的特點(diǎn):在一次請(qǐng)求響應(yīng)中,無(wú)論函數(shù)調(diào)用多少次,靜態(tài)變量的初始化只會(huì)執(zhí)行一次

局部變量 在函數(shù)中定義的一種變量; $a = 0;
局部變量的特點(diǎn):只在定義的函數(shù)中有效,函數(shù)執(zhí)行完,局部變量就會(huì)釋放,所以外部無(wú)法訪問(wèn)局部變量

純凈手工編譯版PHP如何增加其他擴(kuò)展類庫(kù)?

由于PHP是手工編譯最簡(jiǎn)化安裝,所以只包含一些基本擴(kuò)展,其他大部分?jǐn)U展都沒(méi)有,后期才按需添加

加入其他擴(kuò)展,有2種方法

1、重新安裝PHP (不推薦)
2、使用PHP官方提供的工具phpize來(lái)添加 (添加)

使用phpize來(lái)生成其他擴(kuò)展.so文件

phpize工具所在位置:php安裝目錄/bin/phpize
所需依賴:autoconf工具 yum install autoconf
步驟:
1、cd /php源碼目錄/ext
2、找到所需安裝擴(kuò)展庫(kù),然后cd進(jìn)入  //例如: cd curl
3、php安裝目錄/bin/phpize   //生成configure文件
4、./configure --with-php-config=/usr/local/php/bin/php-config  //生成Makefile
5、make && make install

## 最終.so安裝位置在php/bin/php-config中已經(jīng)指定

php.ini配置文件中加入extension=curl.so

注意:如果想按上面配置,必須在php.ini中配置extension_dir="/usr/local/php/ext"
PHP 如何使用函數(shù)更健壯呢?
function_exists("ini_set") && ini_set("memory_limit", "1024M");
PHP 如何定義常量更健壯呢?
defined("GREETING") || define("GREETING","Hello world!");
函數(shù)定義時(shí),前面加&代表什么?加與不加&有什么區(qū)別?

前置知識(shí)

$a = 55;
$b = &$a; //引用變量 $b為55
$b = 100; //$b為100 $a為100

函數(shù)的返回方式有2種

1、引用返回方式(定義函數(shù)時(shí),前面需加&,否則函數(shù)調(diào)用時(shí)只會(huì)普通返回
2、普通返回方式(在調(diào)用函數(shù)前不能使用&符號(hào),否則會(huì)報(bào)錯(cuò))

注意事項(xiàng)

1、如果定義函數(shù)時(shí),前面加&的話,函數(shù)調(diào)用可以使用引用返回普通返回
2、如果定義函數(shù)時(shí),前面不加&的話,函數(shù)調(diào)用可以只可使用普通返回
URL 如何變得更加優(yōu)美?

原始URL ———— 查詢字符串

http://www.test.com/index.php?key=val
參數(shù)可以使用 $_GET["key"] 獲取,但這樣的 URL 很不美觀

初步優(yōu)化 ———— 使用PATHINFO模式

http://www.test.com/index.php/key/val
使用 PATHINFO 模式的 URL ,參數(shù)的獲取就不可以使用 $_GET["key"] 獲取了。

必須使用 $_SERVER["PATH_INFO"] 獲取

進(jìn)一步優(yōu)化 ———— 隱藏入口文件index.php

http://www.test.com/key/val
要使用到服務(wù)器Apache/Nginx的URL重寫(xiě)功能

最終優(yōu)化 ———— 開(kāi)發(fā)路由層(偽靜態(tài))

http://www.test.com/val.html
很多框架都有路由層,此路由優(yōu)化后的 URL ,對(duì) SEO 最為友好
如何使用 Xdebug 來(lái)調(diào)試 PHP 代碼

在 php.ini 進(jìn)入如下配置

xdebug.profiler_output_dir="H:installphpStudy	mpxdebug"
xdebug.trace_output_dir="H:installphpStudy	mpxdebug"
zend_extension="H:installphpStudyphpphp-5.6.27-ntsextphp_xdebug.dll"

xdebug.profiler_enable = 1
xdebug.auto_trace = 1
xdebug.show_exception_trace = 1
;這里必須設(shè)置為0,為了能使用瀏覽器插件 xdebug helper配合調(diào)試
xdebug.remote_autostart = 0
xdebug.remote_enable = 1
;這里是開(kāi)啟遠(yuǎn)程調(diào)試
xdebug.remote_handler = "dbgp"
;遠(yuǎn)程調(diào)試的host
xdebug.remote_host = "127.0.0.1"
;遠(yuǎn)程調(diào)試的端口號(hào)
xdebug.remote_port = 9000
;遠(yuǎn)程調(diào)試的對(duì)應(yīng) key
xdebug.idekey="PHPSTORM" 

瀏覽器要安裝對(duì)應(yīng)的調(diào)試插件

chrome => xdebug helper
火狐 => Xdebug Helper

遠(yuǎn)程調(diào)試

1、要檢查防火墻是否已經(jīng)關(guān)閉
2、如果你的項(xiàng)目所在環(huán)境是外網(wǎng),就是IDE所在PC與項(xiàng)目部署環(huán)境不能通過(guò)IP直接訪問(wèn),則遠(yuǎn)程斷點(diǎn)方式不能使用。(必須使用域名)
面向?qū)ο笾?static與self的區(qū)別

self非動(dòng)態(tài)的,在哪個(gè)類中存在,self就代表哪個(gè)類

static是動(dòng)態(tài)的,根據(jù)具體哪個(gè)類調(diào)用,static指向那個(gè)類

static與self的區(qū)別

PHP 自動(dòng)加載機(jī)制是什么?
在做項(xiàng)目時(shí),我們經(jīng)常遇到要用到很多類(有些是自己寫(xiě)的,有些是第三方類庫(kù)的),
使用前必須先加載(include/require),但如果全部自己手動(dòng)加載,那么將很吃力不討好:

1、代碼量巨大,不好維護(hù),浪費(fèi)時(shí)間
2、無(wú)法做到按需加載,運(yùn)行性能低下
3、還有可能造成重復(fù)加載統(tǒng)一類

所以,PHP5提出解決這一問(wèn)題方法:自動(dòng)加載機(jī)制

第一代自動(dòng)加載機(jī)制 autoload

function __autoload($classname) {
    require_once ($classname . “class.php”);
}

$person = new Person(”Altair”, 6);
var_dump ($person);
看出autoload至少要做三件事情,
第一件事是根據(jù)類名確定類文件名
第二件事是確定類文件所在的磁盤(pán)路徑(在我們的例子是最簡(jiǎn)單的情況,類與調(diào)用它們的PHP程序文件在同一個(gè)文件夾下)
第三件事是將類從磁盤(pán)文件中加載到系統(tǒng)中(第三步最簡(jiǎn)單,只需要使用include/require即可)
缺點(diǎn)就是:一般項(xiàng)目都是用到第三方類庫(kù),很多時(shí)候這種類名與與類文件所在的磁盤(pán)路徑的映射規(guī)則與我們訂的不同,如果全部寫(xiě)在一個(gè)__autoload()函數(shù)里會(huì)很臃腫,難維護(hù),性能低等問(wèn)題

第二代自動(dòng)加載機(jī)制 SPL autoload

PHP5提供的一個(gè)SPL擴(kuò)展,其中提供的自動(dòng)加載機(jī)制用于取代上面第一代自動(dòng)加載機(jī)制

spl_autoload是SPL實(shí)現(xiàn)的默認(rèn)的自動(dòng)加載函數(shù),它的功能比較簡(jiǎn)單。我們不能擴(kuò)展spl_autoload()函數(shù),
怎樣讓spl_autoload自動(dòng)起作用呢?在PHP腳本中第一次調(diào)用spl_autoload_register()函數(shù),無(wú)需傳入任何參數(shù),一般不會(huì)使用SPL擴(kuò)展預(yù)先定義好的spl_autoload()函數(shù)

## 1、注冊(cè)函數(shù)
function my_autoloader($class) {
    include "classes/" . $class . ".class.php";
}
spl_autoload_register("my_autoloader");

## 2、自PHP 5.3.0起可以使用一個(gè)匿名函數(shù)
spl_autoload_register(function ($class) {
    include "classes/" . $class . ".class.php";
});

## 3、注冊(cè)類靜態(tài)方法 -- 自 PHP 5.3.0 起
namespace Foobar;
class Foo {
    static public function test($className) {
        $className = str_replace("", DIRECTORY_SEPARATOR, $className);
    }
}
spl_autoload_register(__NAMESPACE__ ."Foo::test");

## 4、在類方法中調(diào)用,注冊(cè)類靜態(tài)方法
namespace Foobar;
class Framework{
    public static function init() {
         require_once (__DIR__ . "/functions.php");
         // 自動(dòng)加載設(shè)置
         spl_autoload_register("self::loadClass");
    }
    
    public static function loadClass($className) {
        $className = str_replace("", DIRECTORY_SEPARATOR, $className);
    }
}
如果 加載的類 是在某命名空間內(nèi)的話,自動(dòng)加載函數(shù)接受到的$class變量將是 thinklibPerson
必須帶上命名空間

注意

如果同時(shí)定義__autoload()函數(shù)和spl_autoload_register()函數(shù),那到底會(huì)怎樣?
先spl_autoload_register()起效果,如果沒(méi)有這個(gè)函數(shù)的話,那么再找__autoload()函數(shù)
同時(shí)注冊(cè)多個(gè)autoload函數(shù),該如何執(zhí)行呢?
按順序執(zhí)行多個(gè)注冊(cè)的autoload()函數(shù),但只要執(zhí)行了require/include之后,后面注冊(cè)的函數(shù)就不會(huì)執(zhí)行下去了

autoload()函數(shù)內(nèi)返回return true/false都沒(méi)有效果

PHP 自動(dòng)加載機(jī)制

4種PHP回調(diào)函數(shù)風(fēng)格是什么?
匿名函數(shù)回調(diào)
$server->on("Request", function ($req, $resp) {
    echo "hello world";
});
類靜態(tài)方法回調(diào)
class A
{
    static function test($req, $resp)
    {
        echo "hello world";
    }
}
$server->on("Request", "A::Test");
$server->on("Request", array("A", "Test"));
函數(shù)回調(diào)
function my_onRequest($req, $resp)
{
    echo "hello world";
}
$server->on("Request", "my_onRequest");
對(duì)象方法
class A
{
    function test($req, $resp)
    {
        echo "hello world";
    }
}

$object = new A();
$server->on("Request", array($object, "test"));

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/23283.html

相關(guān)文章

  • python3 queue多線程通信

      小編寫(xiě)這篇文章的主要目的,主要是給大家介紹關(guān)于python3 queue多線程通信,這里面有很多的技術(shù)性的難點(diǎn),那么,該怎么去進(jìn)行處理呢,下面小編給大家進(jìn)行詳細(xì)的解答一下。  queue分類  python3 queue分三類:  先進(jìn)先出隊(duì)列  后進(jìn)先出的棧  優(yōu)先級(jí)隊(duì)列  他們的導(dǎo)入方式分別是: fromqueueimportQueue   fromqueueimportLifoQueue...

    89542767 評(píng)論0 收藏0
  • JavaScript樹(shù)結(jié)構(gòu)深度優(yōu)先算法

      什么是樹(shù)  現(xiàn)實(shí)中樹(shù)隨處可見(jiàn);在計(jì)算機(jī)世界,樹(shù)就是一種分層結(jié)構(gòu)的抽象模型。  如下圖所示:  樹(shù)結(jié)構(gòu)的可以用在很多情景,就如下圖公司的組織架構(gòu),用樹(shù)就可以表達(dá)出來(lái),如下圖:  組織架構(gòu)只是其中之一,比如族譜、省市等用樹(shù)的結(jié)構(gòu)形式展現(xiàn)是完全可以。  樹(shù)的術(shù)語(yǔ)  樹(shù)有很多的術(shù)語(yǔ),如下圖:  樹(shù):n(n≥0)個(gè)節(jié)點(diǎn)所構(gòu)成的有限集合,當(dāng)n=0時(shí),稱為空樹(shù);  節(jié)點(diǎn)的度:節(jié)點(diǎn)的子樹(shù)個(gè)數(shù),例如B節(jié)點(diǎn)的度就...

    3403771864 評(píng)論0 收藏0
  • redis Q&A

    摘要:是什么基于內(nèi)存有客戶端和服務(wù)器端非關(guān)系型數(shù)據(jù)庫(kù)應(yīng)用場(chǎng)景是什么緩存隊(duì)列數(shù)據(jù)持久存儲(chǔ)如何安裝如何啟動(dòng)如何關(guān)閉客戶端如何啟動(dòng)下載解壓編譯安裝服務(wù)啟動(dòng)注意這種方式啟動(dòng)使用的是默認(rèn)配置通過(guò)啟動(dòng)參數(shù)告訴使用指定配置文件使用下面命令啟動(dòng)服務(wù)關(guān) redis 是什么? 基于內(nèi)存 有客戶端和服務(wù)器端 NoSQL非關(guān)系型數(shù)據(jù)庫(kù) redis 應(yīng)用場(chǎng)景是什么? 緩存 隊(duì)列 數(shù)據(jù)持久存儲(chǔ) redis 如何...

    saucxs 評(píng)論0 收藏0
  • Python必考五大面試題是什么?下文給大家解答

      小編寫(xiě)這篇文章的一個(gè)主要目的,主要是來(lái)給大家做個(gè)介紹,介紹的內(nèi)容主要是涉及到Python一些試題的講解,小編給大家總結(jié)出來(lái)了五道必考的題目,大家可要仔細(xì)閱讀哦,下面就給大家詳細(xì)解答。  1、使用while循環(huán)實(shí)現(xiàn)輸出2-3+4-5+6...+100的和  #方法一   #從2開(kāi)始計(jì)算   i=2   #定義一個(gè)變量用于保存結(jié)果   sum=0   whilei<=100:   i...

    89542767 評(píng)論0 收藏0
  • WebServer Q&A

    摘要:進(jìn)程的工作就是管理子進(jìn)程,而子進(jìn)程的工作就是處理用戶請(qǐng)求。當(dāng)新的請(qǐng)求過(guò)來(lái)的時(shí)候,管理線程會(huì)把請(qǐng)求交給其他的空閑線程處理。 當(dāng)前主流的web服務(wù)器有哪些? Apache Nginx iis Apache的工作模式有哪些?各自的特點(diǎn)和優(yōu)缺點(diǎn)是什么?適用場(chǎng)景是什么? apache主要工作模式有3種,分別如下: prefork工作模式 特點(diǎn) prefork模式是一種非線程的多進(jìn)程模型,we...

    MkkHou 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

mikasa

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<