成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Zephir入門(mén) —— 語(yǔ)法篇

shiina / 3056人閱讀

摘要:變量對(duì)象屬性數(shù)組靜態(tài)變量不支持全局變量,也不允許訪問(wèn)用戶(hù)域的全局變量,但是可以訪問(wèn)的超級(jí)全局變量變量類(lèi)型支持動(dòng)態(tài)和靜態(tài)類(lèi)型。雖然失去了動(dòng)態(tài)型變量的靈活性,但是在編譯時(shí)靜態(tài)變量能進(jìn)行更多的優(yōu)化。

概述

Zephir的語(yǔ)法跟PHP很相似,所以這里不會(huì)把官網(wǎng)的文檔照搬過(guò)來(lái)翻譯一遍,而是會(huì)把一些Zephir相較于PHP比較特別的語(yǔ)法挑出來(lái)講一下。如果想要要完整學(xué)習(xí)Zephir的語(yǔ)法,沒(méi)有比官網(wǎng)的文檔更好的地方了。

基本語(yǔ)法

Zephir的文件后綴名為zep,每個(gè)文件都必須包含且只能包含一個(gè)類(lèi)。每個(gè)類(lèi)必須有一個(gè)命名空間,且目錄結(jié)構(gòu)必須跟類(lèi)名和命名空間匹配。例如下面的目錄結(jié)構(gòu):

mylibrary/
        router/
                exception.zep # MyLibraryRouterException
        router.zep # MyLibraryRouter

那么exception.zep的命名空間和類(lèi)名如下:

phpnamespace MyLibraryRouter;

class Exception extends Exception
{

}

Zephir里的變量名不需要像PHP那樣帶$符號(hào),且有兩種聲明的方式:

// 可以使用var來(lái)定義變量,或者指定具體的變量類(lèi)型
var a;
int b;
bool c = true;

// 可以在一行里聲明多個(gè)變量
var a = "hello", b = 0, c;

要修改變量,屬性或者數(shù)組的值,需要使用let關(guān)鍵字。

let name = "Tony";           // 變量
let this->name = "Tony";     // 對(duì)象屬性
let data["name"] = "Tony";   // 數(shù)組
let self::_name = "Tony";    // 靜態(tài)變量

Zephir不支持全局變量,也不允許訪問(wèn)用戶(hù)域的全局變量,但是可以訪問(wèn)PHP的超級(jí)全局變量:

var price = _POST["price"];

var requestMethod = _SERVER["REQUEST_METHOD"];
變量類(lèi)型

Zehpir支持動(dòng)態(tài)和靜態(tài)類(lèi)型。

動(dòng)態(tài)類(lèi)型

動(dòng)態(tài)類(lèi)型變量跟PHP一樣,可以在賦值后修改為不同類(lèi)型的值。動(dòng)態(tài)類(lèi)型變量必須用var來(lái)聲明。

var a, b, c;

// 初始化變量
let a = "hello", b = false;

// 改變它們的值
let a = 10, b = "140";

// 對(duì)它們進(jìn)行操作
let c = a + b;

Zephir不會(huì)檢查整型的溢出,如果要操作比較大的數(shù)字,可以使用浮點(diǎn)型或者靜態(tài)型變量"unsigned long":

unsigned long my_number = 2147483648;

Zephir不支持在字符串里使用變量的方式,你可以使用拼接方式:

var name = "peter";

echo "hello: " . name;

數(shù)組的定義要用中括號(hào)[],且字符串型的鍵需要使用雙引號(hào):

let myArray = [1, 2, 3];
let myHash = [0: "first", 1: true, 2: null];
let myHash = ["first": 7.0, "second": "some string", "third": false];
靜態(tài)變量

靜態(tài)變量一旦聲明類(lèi)型后就不能再改變。雖然失去了動(dòng)態(tài)型變量的靈活性,但是在編譯時(shí)靜態(tài)變量能進(jìn)行更多的優(yōu)化。

Zephir支持以下的靜態(tài)類(lèi)型:

boolean: A boolean expresses a truth value. It can be either ‘true’ or ‘false’.

integer: Signed integers. At least 16 bits in size.

unsigned integer: Unsigned integers. At least 16 bits in size.

char: Smallest addressable unit of the machine that can contain basic character set.

unsigned char: Same size as char, but guaranteed to be unsigned.

long: Long signed integer type. At least 32 bits in size.

unsigned long: Same as long, but unsigned.

float/double: Double precision floating-point type. The size is platform-dependent.

string: A string is series of characters, where a character is the same as a byte.

unsigned long: Same as long, but unsigned.

array: An structure that can be used as hash, map, dictionary, collection, stack, etc.

布爾型,非布爾值會(huì)自動(dòng)轉(zhuǎn)化為true或者false:

boolean a;

let a = true,
    a = 100, // 自動(dòng)轉(zhuǎn)換為true
    a = null, // 自動(dòng)轉(zhuǎn)換為false
    a = "hello"; // 拋出編譯器異常

整型:

int a;

let a = 50,
    a = -70,
    a = 100.25, // 自動(dòng)轉(zhuǎn)換為100
    a = null, // 自動(dòng)轉(zhuǎn)換為0
    a = false, // 自動(dòng)轉(zhuǎn)換為0
    a = "hello"; // 拋出編譯器異常

無(wú)符號(hào)整型,帶符號(hào)整型的值會(huì)自動(dòng)轉(zhuǎn)換為無(wú)符號(hào)。另外要注意的是,無(wú)符號(hào)整型的最大值要比普通整型大一倍,所以在把無(wú)符號(hào)整型的值賦予普通整型時(shí)要注意下:

uint a, int b;

let a = 50,
    a = -70, // 自動(dòng)轉(zhuǎn)換為70

let a = 2147483648,
    b = a; // 可能會(huì)丟失數(shù)據(jù)

長(zhǎng)整型/無(wú)符號(hào)長(zhǎng)整型變量的值范圍是普通整型/無(wú)符號(hào)整型的兩倍,除此以外跟普通整型/無(wú)符號(hào)整型一致。

ulong a, long b;

let a = 4294967296,
    b = a; // 可能會(huì)丟失數(shù)據(jù)

字符型:

har ch, string name = "peter";

let ch = name[2]; // 存儲(chǔ)"t"
let ch = "Z"; // 需要用單引號(hào)

字符串:

string a;

let a = "",
    a = "hello", // 使用用雙引號(hào)
    a = "A", // 自動(dòng)轉(zhuǎn)換為"A"
    a = null; // 自動(dòng)轉(zhuǎn)換為""
  

更詳細(xì)的類(lèi)型語(yǔ)法請(qǐng)看這里:http://zephir-lang.com/types.html

操作符

Zephir支持的運(yùn)算符基本跟PHP一致:

// 算術(shù)運(yùn)算符
// Zephir支持PHP中除了`$a ** $b`(PHP 5.6才開(kāi)始支持)這種方式外的算術(shù)運(yùn)算符。
let c = a + b;

// 比較運(yùn)算符
// Zephir支持的比較運(yùn)算符跟PHP一致(除了PHP 7增加支持的兩個(gè)比較運(yùn)算符外)。
if a == b {
    return 0;
} 

// 邏輯運(yùn)算符
// Zephir支持`&&`、`||`和`!`這三個(gè)邏輯運(yùn)算符,但不支持PHP里`And`、`Or`和`Xor`這三個(gè)邏輯運(yùn)算符。
if a && b || !c {
    return -1;
}

// 位運(yùn)算符
// 跟PHP一致
if a & SOME_FLAG {
    echo "has some flag";
}

// 三元運(yùn)算符
// 跟PHP一致
let b = a == 1 ? "x" : "y"; 

然后,Zephir還支持empty、isset等特殊的運(yùn)算符:

// empty
// 如果表達(dá)式的值為null、空字符串或者空數(shù)組,則為empty
let someVar = "";
if empty someVar {
    echo "is empty!";
}

// isset
// 用于檢查數(shù)組的索引或者對(duì)象的屬性是否已定義
// 功能更類(lèi)似于PHP中的array_key_exists方法
let someArray = ["a": 1, "b": 2, "c": 3];
if isset someArray["b"] {
    echo "yes, it has an index "b"
";
}

// fetch
// 用于簡(jiǎn)化在PHP中以下的操作:
if (isset($myArray[$key])) {
    $value = $myArray[$key];
    echo $value;
}
// 使用fetch可以用以下代碼實(shí)現(xiàn),只有在key存在的情況下,fetch才返回true:
if fetch value, myArray[key] {
    echo value;
}

// typeof
// 用于檢查變量的類(lèi)型
if (typeof str == "string") {
    echo str;
}
  

更詳細(xì)的操作符語(yǔ)法請(qǐng)看這里:http://zephir-lang.com/operators.html

數(shù)組

數(shù)組可以使用關(guān)鍵字vararray進(jìn)行聲明:

var a = []; // 類(lèi)型可以改變
array b = []; // 運(yùn)行過(guò)程中,類(lèi)型不可以改變

數(shù)組使用中括號(hào)進(jìn)行創(chuàng)建,操作方式跟PHP一樣:

let elements = [];

let elements = [1, 3, 4];

let elements = ["first", 2, true];

let elements[0] = "bar";

let elements = ["foo": "bar", "bar": "foo"];

let foo = elements["foo"];
  

更詳細(xì)的數(shù)組操作語(yǔ)法請(qǐng)看這里:http://zephir-lang.com/arrays.html

類(lèi)和對(duì)象 類(lèi)

前面說(shuō)過(guò),每個(gè)zephir文件都必須包含一個(gè)類(lèi),而且只能包含一個(gè)類(lèi)。

Zehpir的類(lèi)支持finalabstract兩個(gè)修飾符,修飾符的作用跟PHP中的一致,例如:

namespace Test;

/**
 * 這個(gè)類(lèi)不能被擴(kuò)展
 */
final class MyClass
{

}
方法

類(lèi)的成員方法支持的可見(jiàn)性修飾符也跟PHP一致,支持public、protectedprivate,但Zephir強(qiáng)制方法必須顯式的帶上修飾符。

同時(shí)方法還支持finaldeprecated兩個(gè)修飾符:

// 這個(gè)方法不能被重寫(xiě)
public final function foo()
{   
}

// 調(diào)用此方法會(huì)拋出E_DEPRECATED 異常
public deprecated function foo()
{  
}

方法的參數(shù)也支持PHP中可選參數(shù)的方式,同時(shí)也支持靜態(tài)類(lèi)型:

public function doSum(a, b = 3)
{
    return a + b;
}

public function doSum2(int a = 4, int b = 2)
{
    return a + b;
}

使用靜態(tài)類(lèi)型參數(shù)時(shí),如果傳入的參數(shù)類(lèi)型不一致,Zephir會(huì)試圖對(duì)傳入值進(jìn)行類(lèi)型的轉(zhuǎn)換。如果基于某些考慮不想Zephir自動(dòng)去做這個(gè)事情,我們可以通過(guò)添加一個(gè)!號(hào)禁止這個(gè)行為:

public function filterText(string! text, boolean escape=false)
{
    //...
}

另外我們還能通過(guò)const關(guān)鍵字設(shè)置參數(shù)為只讀:

// a為只讀
public function getSomeData(const string a)
{
    // 這里會(huì)拋出編譯錯(cuò)誤
    let a = "hello";
}

Zephir還提供了方法返回類(lèi)型的提示功能,使得編譯器可以知道方法返回的類(lèi)型:

namespace App;

class MyClass
{
    public function getSomeData() -> string
    {
        // 這里會(huì)拋出編譯異常。因?yàn)榉祷刂凳遣紶栃?,跟期待的返回?lèi)型不一致
        return false;
    }

    public function getSomeOther() -> 
    {
        // 這里會(huì)拋出編譯異常,如果返回的對(duì)象不是AppMyInterface接口的一個(gè)實(shí)現(xiàn)
        return new AppMyObject;
    }

    public function process()
    {
        var myObject;

        // 類(lèi)型提示會(huì)告訴編譯器myObject是AppMyInterface的一個(gè)實(shí)例
        let myObject = this->getSomeOther();

        // 編譯器會(huì)檢查AppMyInterface是否實(shí)現(xiàn)了一個(gè)叫someMethod的方法
        echo myObject->someMethod();
    }

    // 一個(gè)方法可以有多個(gè)的返回類(lèi)型,使用|進(jìn)行分隔
    public function getSomeData2(a) -> string | bool
    {
        if a == false {
            return false;
        }
        return "error";
    }

    // 如果返回類(lèi)型為void,則表示此方法不允許返回任何數(shù)據(jù)
    public function setConnection(connection) -> void
    {
        let this->_connection = connection;
    }

}
屬性

類(lèi)的屬性同樣支持publicprotectedprivate三個(gè)修飾符,而且必須顯式指定:

namespace Test;

class MyClass
{

    public myProperty1;
    protected myProperty2;
    private myProperty3;

    // 屬性可以賦予默認(rèn)值,但是這個(gè)值必須在編譯的時(shí)候就能知道而不需要依賴(lài)于運(yùn)行環(huán)境
    protected myProperty4 = 5;
    protected myProperty5 = "my value";

    public function setMyProperty1(var myProperty)
    {
        // 修改屬性的值
        let this->myProperty1 = myProperty;
    }

    public function getMyProperty1()
    {
        // 讀取屬性的值
        return this->myProperty1;
    }

}

Zephir還提供了一個(gè)快捷的方式去實(shí)現(xiàn)Getter和Setter,例如下面的代碼:

namespace App;

class MyClass
{
    protected myProperty {
        set, get, toString
    };

    protected someProperty = 10 {
        set, get
    };

}

相當(dāng)于:

namespace Test;

class MyClass
{
    protected myProperty;

    protected someProperty = 10;

    public function setMyProperty(myProperty)
    {
        this->myProperty = myProperty;
    }

    public function getMyProperty()
    {
        return this->myProperty;
    }

    public function setSomeProperty(someProperty)
    {
        this->someProperty = someProperty;
    }

    public function getSomeProperty()
    {
        return this->someProperty;
    }

    public function __toString()
    {
        return this->myProperty;
    }

 }

另外常量的使用也是支持的:

namespace Test;

class MyClass
{

    const MYCONSTANT1 = false;
    const MYCONSTANT2 = 1.0;

    public function someMethod()
    {
        return MyClass::MYCONSTANT1;
    }
}
  

更詳細(xì)的類(lèi)和對(duì)象的使用方式請(qǐng)看這里:http://zephir-lang.com/oop.html

內(nèi)置方法

Zephir自身也內(nèi)置了不少的方法,這些方法基本都是PHP中某些方法的OO實(shí)現(xiàn)。例如:

public function foo(string! s)
{
    return strlen(s);
}

// 使用內(nèi)置方法
public function foo(string! s)
{
    return s->length();
}
  

更詳細(xì)的內(nèi)置方法使用方式請(qǐng)看這里:http://zephir-lang.com/builtin-methods.html

流程控制 條件語(yǔ)句

條件判斷語(yǔ)句中,ifswitch語(yǔ)句跟PHP類(lèi)似,但需要注意的是,條件表達(dá)式的括號(hào)可以省略:

if a > 100 {
    echo "to big";
} elseif a < 0 {
    echo "to small";
} else {
    echo "ok";
}

switch count(items) {
}
循環(huán)語(yǔ)句

循環(huán)語(yǔ)句中,用whileloopfor三種語(yǔ)句。

while語(yǔ)句跟PHP差不多,loop為Zephir增加的語(yǔ)句,用于創(chuàng)建一個(gè)無(wú)限的循環(huán):

let n = 40;
loop {
    let n -= 2;
    if n % 5 == 0 { break; }
    echo x, "
";
}

for的用法跟PHP有很大不同,例如:

// 循環(huán)數(shù)組
for item in ["a", "b", "c", "d"] {
    echo item, "
";
}

let items = ["a": 1, "b": 2, "c": 3, "d": 4];

for key, value in items {
    echo key, " ", value, "
";
}

// 遍歷字符串
string language = "zephir"; char ch;

for ch in language {
    echo "[", ch ,"]";
}

三種循環(huán)語(yǔ)句中均支持break語(yǔ)句和continue語(yǔ)句。

文件包含

Zephir中也提供了類(lèi)似PHP中require語(yǔ)句的語(yǔ)句:

if file_exists(path) {
    require path;
}

注意這個(gè)語(yǔ)句只能用于包含PHP文件,而不能包含zephir文件。

  

更詳細(xì)的流程控制語(yǔ)法請(qǐng)看這里:http://zephir-lang.com/control.html

異常處理

異常處理跟PHP也類(lèi)似:

try {

    // 可以在這里拋出異常
    throw new Exception("This is an exception");

} catch Exception, e {

    // 異常處理
    echo e->getMessage();
}

如果不需要的話,保存異常信息的變量e可以省略:

try {

    throw new Exception("This is an exception");

} catch Exception {

    echo e->getMessage();
}

同時(shí)捕捉不同類(lèi)型的異常:

try {

    throw new Exception("This is an exception");

} catch RuntimeException|Exception, e {

    echo e->getMessage();
}
  

更詳細(xì)的異常處理的使用方式請(qǐng)看這里:http://zephir-lang.com/exceptions.html

調(diào)用PHP函數(shù)

可以直接調(diào)用PHP中內(nèi)置的函數(shù),例如調(diào)用base64_encode函數(shù):

namespace MyLibrary;

class Encoder
{

    public function encode(var text)
    {
        if strlen(text) != 0 {
            return base64_encode(text);
        }
        return false;
    }
}

用戶(hù)自己定義的函數(shù)也可以調(diào)用:

namespace MyLibrary;

class Encoder
{

    public function encode(var text)
    {
        if strlen(text) != 0 {
            if function_exists("my_custom_encoder") {
                return my_custom_encoder(text);
            } else {
                return base64_encode(text);
            }
        }
        return false;
    }
}

由于PHP的函數(shù)只接收和返回動(dòng)態(tài)變量,所以如果你傳入靜態(tài)變量的話,Zephir會(huì)隱式的創(chuàng)建一個(gè)臨時(shí)變量用于函數(shù)的調(diào)用。而返回的結(jié)果如果要賦值給靜態(tài)變量的話,需要作適當(dāng)?shù)念?lèi)型轉(zhuǎn)換:

namespace MyLibrary;

class Encoder
{

    public function encode(string text)
    {
        string encoded = "";

        if strlen(text) != 0 {
            let encoded = (string) base64_encode(text);
            return "(" . encoded . ")";
        }
        return false;
    }
}

最后,如果我們需要?jiǎng)討B(tài)的對(duì)函數(shù)進(jìn)行調(diào)用,可以使用以下的方式:

namespace MyLibrary;

class Encoder
{

    public function encode(var callback, string text)
    {
        return {callback}(text);
    }
}
  

更詳細(xì)的函數(shù)的調(diào)用方法請(qǐng)看這里:http://zephir-lang.com/functions.html

閉包

Zephir里也支持閉包和匿名函數(shù),你可以把它返回給PHP:

namespace MyLibrary;

class Functional
{

    public function map(array! data)
    {
        return function(number) {
            return number * number;
        };
    }
}

也可以直接調(diào)用:

namespace MyLibrary;

class Functional
{

    public function map(array! data)
    {
        return data->map(function(number) {
            return number * number;
        });
    }
}

另外Zephir還提供了一個(gè)短語(yǔ)法用來(lái)定義閉包:

namespace MyLibrary;

class Functional
{

    public function map(array! data)
    {
        return number => number * number;
    }
}
參考

http://zephir-lang.com/index.html

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/21045.html

相關(guān)文章

  • Zephir入門(mén) —— Hello world

    摘要:概述是一個(gè)開(kāi)源的用于簡(jiǎn)化擴(kuò)展的創(chuàng)建和維護(hù)的語(yǔ)言。它使得不擅長(zhǎng)的開(kāi)發(fā)人員也能寫(xiě)出擴(kuò)展。是縮寫(xiě),讀音為。然后我們?cè)诶镎{(diào)用方法正常的話會(huì)輸出。至此我們也完成了我們的第一個(gè)擴(kuò)展。 概述 Zephir是一個(gè)開(kāi)源的用于簡(jiǎn)化PHP擴(kuò)展的創(chuàng)建和維護(hù)的語(yǔ)言。它使得不擅長(zhǎng)C/C++的PHP開(kāi)發(fā)人員也能寫(xiě)出PHP擴(kuò)展。Zephir是Zend Engine/PHP/Intermediate縮寫(xiě),讀音為zep...

    Vicky 評(píng)論0 收藏0
  • 【PHP 擴(kuò)展開(kāi)發(fā)】Zephir 基礎(chǔ)

    摘要:變量作為函數(shù)返回值時(shí),必須聲明為動(dòng)態(tài)類(lèi)型。動(dòng)態(tài)變量與中的變量基本完全相同支持在使用時(shí)改變類(lèi)型。比較運(yùn)算符在運(yùn)算時(shí)考慮變量類(lèi)型,如果是動(dòng)態(tài)變量與一致。與不一致,語(yǔ)句可以沒(méi)有,表示忽略所有異常。 上一篇 《Zephir 簡(jiǎn)介》 簡(jiǎn)單介紹了環(huán)境搭建,編寫(xiě)了一個(gè)的簡(jiǎn)單示例。這一篇繼續(xù)介紹 Zephir 基礎(chǔ)。 基本語(yǔ)法Zephir 中,每個(gè)文件都必須有且只有一個(gè)類(lèi),每個(gè)類(lèi)都必須有一個(gè)命名空間,...

    wawor4827 評(píng)論0 收藏0
  • PHP擴(kuò)展開(kāi)發(fā)教程1 - 相關(guān)開(kāi)發(fā)技術(shù)對(duì)比及介紹

    摘要:四使用語(yǔ)言開(kāi)發(fā)是我重點(diǎn)推薦的擴(kuò)展開(kāi)發(fā)框架,簡(jiǎn)明易懂,功能強(qiáng)大,開(kāi)發(fā)效率高,代碼易維護(hù),執(zhí)行速度快。優(yōu)點(diǎn)三支持,的擴(kuò)展開(kāi)發(fā)有兩套擴(kuò)展開(kāi)發(fā)框架,分別支持,,雖然框架代碼有兩個(gè),但是接口卻是一樣的。 PHP擴(kuò)展是高級(jí)PHP程序員必須了解的技能之一,對(duì)于一個(gè)初入門(mén)的PHP擴(kuò)展開(kāi)發(fā)者,怎么才能開(kāi)發(fā)一個(gè)成熟的擴(kuò)展,進(jìn)入PHP開(kāi)發(fā)的高級(jí)領(lǐng)域呢?本系列開(kāi)發(fā)教程將手把手帶您從入門(mén)進(jìn)入高級(jí)階段。本教程系列...

    alaege 評(píng)論0 收藏0
  • 【PHP 擴(kuò)展開(kāi)發(fā)】Zephir 簡(jiǎn)介

    摘要:什么是是一種中間語(yǔ)言,以接近的語(yǔ)法來(lái)編寫(xiě)代碼,然后轉(zhuǎn)換編譯成擴(kuò)展,旨在簡(jiǎn)化擴(kuò)展的創(chuàng)建和可維護(hù)性。如果成功,會(huì)自動(dòng)生成文件到目錄你需要編輯填加擴(kuò)展測(cè)試一下就這樣,你也會(huì)擴(kuò)展開(kāi)發(fā)了附附編譯擴(kuò)展的方法 什么是 Zephir Zephir 是一種中間語(yǔ)言,以接近 PHP 的語(yǔ)法來(lái)編寫(xiě)代碼,然后轉(zhuǎn)換編譯成 PHP 擴(kuò)展,旨在簡(jiǎn)化 PHP 擴(kuò)展的創(chuàng)建和可維護(hù)性。利用編譯來(lái)提高性能和資源消耗,又不需...

    arashicage 評(píng)論0 收藏0
  • Zephir--最簡(jiǎn)單的php擴(kuò)展開(kāi)發(fā)工具

    摘要:更多關(guān)于的技術(shù)文章的擴(kuò)展是用語(yǔ)言編寫(xiě),是語(yǔ)言引擎,內(nèi)核。見(jiàn)提供了一種類(lèi)似的高級(jí)語(yǔ)言語(yǔ)法的方式,來(lái)自動(dòng)生成擴(kuò)展的語(yǔ)言代碼,使編寫(xiě)擴(kuò)展變得非常的簡(jiǎn)單。直接修改該文件的代碼,使用原擴(kuò)展的編輯方法也是可以滴。 更多關(guān)于PHP的技術(shù)文章http://www.codefrom.com/ php的擴(kuò)展是用c語(yǔ)言編寫(xiě),Zend是語(yǔ)言引擎,PHP內(nèi)核。在實(shí)際編寫(xiě)php擴(kuò)展的時(shí)候,需要使用大量的...

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

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

0條評(píng)論

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