zephir-(8)类和对象1
#zephir-类和对象1#
##前言## 先在这里感谢各位zephir开源技术提供者
zephir全面使用对象编程,这就是为什么拓展的使用方式只能是方法和类,你也将看到,大部分的时间,运行时错误引发异常,而不是致命错误或警告。今天讲一步步讲解zephir类方法变量范围等等的使用,希望大家喜欢.
注:笔者水平有限,说的不正确的地方希望大家多多指正,一同交流技术
附上:
喵了个咪的博客:w-blog.cn
zephir官网地址:http://zephir-lang.com/
github地址:https://github.com/phalcon/zephir
##Class##
每个Zephir文件必须实现一个类或一个接口(只能一个)。类的结构非常类似于PHP的一个类:
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); // 打印空数组
}
##可见性##
- Public:方法标记为“Public”,这意味着公共方法都能使用它。
- Protected:方法标记为“Protected”,这意味着只能调用在类中或类继承中被调用。
- Private:方法标记为“Private”,这意味着私有方法仅对当前类使用。
##可修改性##
- Final:如果一个方法使用了这个修饰符将不能被重载
- Deprecated:方法标记为“Deprecated”抛出E_DEPRECATED错误时调用。
##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() -> <AppMyInterface>
{
// 这将抛出一个编译器异常
// 如果没有实现返回的对象
// 预期的结果是AppMyInterface
return new AppMyObject;
}
public function process()
{
var myObject;
//类型,提示会告诉编译器
// myObject是一个类的实例
// 实现应用 AppMyInterface
let myObject = this->getSomeOther();
// 如果使用AppMyInterface编译器将检查
// 实现了一个名为“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开发人员:
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- centos6-7 yum安装php的方法(推荐)
- Linux修改用户所属组的方法
- centos通过yum安装php的教程
- 树莓派4安装Ubuntu 19.10的教程详解
- Linux系统(CentOS7安装)安装JDK8的教程详解
- Deepin中安装与使用virtualenv的教程
- linux安装jdk并设置环境变量的方法教程(看这一篇够了)
- hadoop基于Linux7的安装配置图文详解
- Linux paste命令的使用方法
- ubuntu下迁移home目录至新的分区教程详解
- SVN服务备份操作步骤分享
- Linux磁盘挂载、分区、扩容操作的实现方法
- linux使用docker-compose部署软件配置详解
- 在Ubuntu中如何查看网络路由表详解
- linux中各种锁机制的使用与区别详解