• 调用方法
    • 参数名

    调用方法

    方法可以使用对象操作符 -> 调用,就像在PHP中:

    1. namespace Test;
    2. class MyClass
    3. {
    4. protected function _someHiddenMethod(a, b)
    5. {
    6. return a - b;
    7. }
    8. public function someMethod(c, d)
    9. {
    10. return this->_someHiddenMethod(c, d);
    11. }
    12. }

    必须使用静态操作符 :: 调用静态方法:

    1. namespace Test;
    2. class MyClass
    3. {
    4. protected static function _someHiddenMethod(a, b)
    5. {
    6. return a - b;
    7. }
    8. public static function someMethod(c, d)
    9. {
    10. return self::_someHiddenMethod(c, d);
    11. }
    12. }

    您可以按照以下动态方式调用方法:

    1. namespace Test;
    2. class MyClass
    3. {
    4. protected adapter;
    5. public function setAdapter(var adapter)
    6. {
    7. let this->adapter = adapter;
    8. }
    9. public function someMethod(var methodName)
    10. {
    11. return this->adapter->{methodName}();
    12. }
    13. }

    参数名

    Zephir 支持按名称或关键字参数调用方法参数。 如果您希望以任意顺序传递参数、记录参数的含义或以更优雅的方式指定参数,那么命名参数可能非常有用。

    请考虑下面的示例. 一个名为 Image 的类具有接收四个参数的方法:

    1. namespace Test;
    2. class Image
    3. {
    4. public function chop(width = 600, height = 400, x = 0, y = 0)
    5. {
    6. //...
    7. }
    8. }

    使用标准方法调用方法:

    1. i->chop(100); // width=100, height=400, x=0, y=0
    2. i->chop(100, 50, 10, 20); // width=100, height=50, x=10, y=20

    使用命名参数, 您可以:

    1. i->chop(width: 100); // width=100, height=400, x=0, y=0
    2. i->chop(height: 200); // width=600, height=200, x=0, y=0
    3. i->chop(height: 200, width: 100); // width=100, height=200, x=0, y=0
    4. i->chop(x: 20, y: 30); // width=600, height=400, x=20, y=30

    当编译器(在编译时) 不知道这些参数的正确顺序时,必须在运行时解析它们。 在这种情况下,可能会有一个最小的额外额外开销:

    1. let i = new {someClass}();
    2. i->chop(y: 30, x: 20);