CakePHP2.0如何在组件中使用函数


CakePHP2.0 How to use a function within a component?

这可能是一个很难回答的问题,但我似乎在任何地方都找不到答案。是否可以在组件中创建自己的函数并在同一组件中调用它?

示例:

Class myComponent extends Component{
 public function doSomething(){
  doThis();
  $b = $a + 2;
  return $b;
 }
 function doThis(){
  $a = 0;
 }
}

您在这里混淆了一些东西。

  1. 您通常可以像这样创建对象方法。不过,您必须将它们称为对象方法:

    public function doSomething() {
        $this->doThis();
        ...
    }
    
  2. 仅仅调用doThis()不会神奇地在调用范围中创建变量$a。该变量将在doThis中创建并包含在其中。这是一件好事。您必须显式地return该方法的值才能使其可用:

    public function doSomething() {
        $a = $this->doThis();
        ...
    }
    protected function doThis() {
        return 0;
    }
    

变量作用域意味着doThis函数内的$a在函数完成时丢失,但您可以这样做:

Class myComponent extends Component
{
    public function doSomething()
    {
        $a=$this->doThis();
        $b = $a + 2;
        return $b;
    }
    function doThis()
    {
        $a = 0;
        return $a;
    }
}

我可能会使用这样的类属性:

Class myComponent extends Component
{
    public $a;
    public function doSomething()
    {
        $this->doThis();
        $b = $this_.a + 2;
        return $b;
    }
    public function doThis()
    {
        $this->a = 0;
    }
}

类属性是通过函数更新信息的好方法。全班同学都可以在任何地方使用它们。如果您通过public声明它,则可以通过如下实例在类外直接使用:

$var=new myComponent();
// Crete a new instance of the object.
echo $var->a; // Outputs the value.

或者,您可以使用private属性,这些属性对函数中的对象本身可见,但对外部世界不可见(好吧,无论如何都无法访问)。