首先,zephir的代码必须放在一个类中,一个文件必须并且只能包含一个类,类必须位于命名空间下。
文件结构
mylibrary/ router/ exception.zep # MyLibrary\Router\Exception router.zep # MyLibrary\Router
其中router.zep和exception.zep就是代码文件(你可以想象,把.zep换成.php):
先来看Router类,打开router.zep,显示如下:
namespace MyLibrary;class Router{}
而router/exception.zep的代码如下:
namespace MyLibrary\Router;class Router extends Exception{}
到目前为止,语法跟php完全一样,很容易掌握吧。
跟php/c/c++/java一样,zephir也是用 ";"作为语句的终止符,你可以像这样书写:
myObject->myMethod(1, 2, 3); echo "world";
注:可以看到zephir里的变量是没有"$"开头的,在php中应该是$myObject->myMethod(),这是一个区别。
注释也是用//和/**/,这里不再废话。
声明变量
和php不一样,在zephir中使用变量前必须先声明,声明变量是为了让编译器进行优化和验证,并且变量名必须唯一,不能使用保留关键词,先看一个例子:
//在一条指令中声明多个相同类型的变量var a, b c;//你也可以每行声明一个var a;var b;var c;
你可以在声明变量时赋初始值,就像这样:
var a = "hello", b = 0, c = 1.0;int d = 50; bool some = true;
注意,变量名是大小写敏感的,下面这两个变量是不同的:
var somevalue, someValue;
变量只在声明它的方法内有效,这点和php一致,不再废话。
namespace Test;class MyClass{ public function someMethod1() { int a = 1, b = 2; return a + b; } public function someMethod2() { int a = 3, b = 4; return a + b; }}
超全局变量
zephir不支持php那样的全局变量,但是可以像php那样获取超全局变量,如$_GET $_POST $_SERVER等,语法上如下:
//从$_POST中获取price参数let price = _POST["price"];//从 $_SERVER 中获取let requestMethod = _SERVER["REQUEST_METHOD"];
如你所见,变量赋值用的是let语句,当然你必须提前声明变量。