#zephir-类和对象1#git
##前言## 先在这里感谢各位zephir开源技术提供者github
zephir全面使用对象编程,这就是为何拓展的使用方式只能是方法和类,你也将看到,大部分的时间,运行时错误引起异常,而不是致命错误或警告。今天讲一步步讲解zephir类方法变量范围等等的使用,但愿你们喜欢.编程
注:笔者水平有限,说的不正确的地方但愿你们多多指正,一同交流技术c#
附上:数组
喵了个咪的博客:w-blog.cnthis
zephir官网地址:http://zephir-lang.com/spa
github地址:https://github.com/phalcon/zephircode
##Class##对象
每一个Zephir文件必须实现一个类或一个接口(只能一个)。类的结构很是相似于PHP的一个类:blog
namespace Test; /** * 这是一个示例类 */ class MyClass { }
##类的修饰符##
支持下面的类修饰符:
Final:这个类不能被extended:
namespace Test; /** * 他的类不能被另外一个类extended */ final class MyClass { }
Abstract:这个类不能被实例化:
namespace Test; /** * 这个类不能被实例化 */ abstract class MyClass { }
##类的方法##
“function”关键字引入了一个方法。通常的方法都实现了可见性的定义,每一个方法都必须设置可见性这是zephir强制的:
namespace Test; class MyClass { public function myPublicMethod() { // ... } protected function myProtectedMethod() { // ... } private function myPrivateMethod() { // ... } }
方法能够接收必需和可选参数:
namespace Test; class MyClass { /** * 全部参数是必需的 */ public function doSum1(a, b) { return a + b; } /** * 只有“a”是必需的,“b”是可选的,它有一个默认值 */ public function doSum2(a, b = 3) { return a + b; } /** * 这两个参数是可选的 */ public function doSum3(a = 1, b = 2) { return a + b; } /** * 参数须要和它们的值必须是整数 */ public function doSum4(int a, int b) { return a + b; } /** * 静态类型的默认值 */ public function doSum4(int a = 4, int b = 2) { return a + b; } }
##可选参数能够为空##
这个编译器保证当一个变量是null值时,Zephir会把null转换成最接近的值:
public function foo(int a = null) { echo a; // “打印0 } public function foo(boolean a = null) { echo a; // 打印false } public function foo(string a = null) { echo a; // 打印空字符串 } public function foo(array a = null) { var_dump(a); // 打印空数组 }
##可见性##
##可修改性##
##Getter/Setter 快捷操做##
在c#中,您可使用get / set / toString Zephir-shortcuts,该特性容许轻松地编写setter和getter属性而不用明显的去实现这些方法。
例如,没有捷径,咱们能找到的代码:
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; } }
您可使用shortcuts写相同的代码以下:
namespace App; class MyClass { protected myProperty { set, get, toString }; protected someProperty = 10 { set, get }; }
当代码编译这些方法导出为真正的方法,但你不须要把它们写一个接一个。
##返回类型提示##
类和接口中的方法能够返回类型提示,这些将为编译器提供有用的额外信息 通知您关于您的应用程序中的错误。 参考下面的例子:
namespace App;
class MyClass { public function getSomeData() -> string { // 这将抛出一个编译器异常 // 返回值以来(boolean)不匹配 // 预期的返回类型为string return false; }
public function getSomeOther() -> <App\MyInterface> { // 这将抛出一个编译器异常 // 若是没有实现返回的对象 // 预期的结果是App\MyInterface return new App\MyObject; } public function process() { var myObject; //类型,提示会告诉编译器 // myObject是一个类的实例 // 实现应用 App\MyInterface let myObject = this->getSomeOther(); // 若是使用App\MyInterface编译器将检查 // 实现了一个名为“someMethod”的方法 echo myObject->someMethod(); }
}
##返回类型:Void##
方法也能够标记为“Void”。 这意味着一个方法不容许返回任何数据:
public function setConnection(connection) -> void { let this->_connection = connection; }
这是为何有用吗?由于若是程序指望从这些方法的返回值,编译器能够检测和产生一个编译器异常:
let myDb = db->setConnection(connection); myDb->execute("SELECT * FROM robots"); // 这将产生一个异常
##总结##
应为确实zephir的类方法这一块的类容比较多,笔者在这里分红两个小节进行说明,多谢你们的支持!
注:笔者能力有限有说的不对的地方但愿你们可以指出,也但愿多多交流!
zephir技术交流:246348908 欢迎你们的加入!
感谢zephir开发人员: