方法中的php类方法

方法中的php类方法,php,zend-framework,php-7,object-oriented-analysis,Php,Zend Framework,Php 7,Object Oriented Analysis,如果我想访问public方法,我可以很容易地做到这一点。但是如果我想在方法中访问属性,我应该怎么做,建议这样做吗 我可以在php中执行类似的操作吗 class Auth { public function check($user = false){ $project = false; //make it somehow public if($user == 'user1'){ $this->project = 1; } } } 而不是

如果我想访问public方法,我可以很容易地做到这一点。但是如果我想在方法中访问属性,我应该怎么做,建议这样做吗

我可以在php中执行类似的操作吗

class Auth {
   public function check($user = false){
    $project = false; //make it somehow public
     if($user == 'user1'){
       $this->project = 1;
     }
   }
}
而不是在其他地方

$auth = new Auth();
$auth->check('user1')->project;
正如大家所知,这里可能有来自的
Zend框架
code

Zend认证


您需要将其添加为类变量:

class Auth {
   public $project = false;

   public function check($user = false) {
     if($user == 'user1'){
       $this->project = 1;
     }
   }
}
该属性可按如下方式使用:

$auth = new Auth ();
$auth->check ('user1');
echo $auth->project; // 1

您需要将其添加为类变量:

class Auth {
   public $project = false;

   public function check($user = false) {
     if($user == 'user1'){
       $this->project = 1;
     }
   }
}
该属性可按如下方式使用:

$auth = new Auth ();
$auth->check ('user1');
echo $auth->project; // 1

$project
在您的情况下是一个局部变量,在
检查
方法的范围内可见。您可以将其定义为成员:

class Auth {
   public $project = false;
   public function check($user = false){
     if($user == 'user1'){
       $this-project = 1;
     }
   }
}
但是,建议将成员
公开
并通过getter访问它,getter将检查它是否已初始化,如果未初始化,则初始化它:

class Auth {
   private $project = false;
   public getProject($user = false) {
      if ($this->project === false) {
          check($user);
      }
      return $this->project;
   }
   public function check($user = false){
     if($user == 'user1'){
       $this-project = 1;
     }
   }
}

$project
在您的情况下是一个局部变量,在
check
方法的范围内可见。您可以将其定义为成员:

class Auth {
   public $project = false;
   public function check($user = false){
     if($user == 'user1'){
       $this-project = 1;
     }
   }
}
但是,建议将成员
公开
并通过getter访问它,getter将检查它是否已初始化,如果未初始化,则初始化它:

class Auth {
   private $project = false;
   public getProject($user = false) {
      if ($this->project === false) {
          check($user);
      }
      return $this->project;
   }
   public function check($user = false){
     if($user == 'user1'){
       $this-project = 1;
     }
   }
}

如果您不想创建额外的类属性和“保留方法链接”,那么如何

类身份验证 { 公共功能检查($user=false) { $project=false;//以某种方式将其公开 如果($user=='user1'){ (yield'project'=>$project);//公开 } 退还$this; } }
稍后,您可以通过以下方式发现它:

$auth = new Auth ();
$auth->check ('user1');
echo $auth->project; // 1
$array=iterator_to_array($auth->check($user));
//数组(1){[“项目”]=>bool(false)}

但是为了使用它,您将无法使用方法链接,bec。无论如何,您都需要检索生成器,因此最好修改发现
$project

的方法。如果您不想创建额外的类属性和“保留方法链接”,那该怎么办

class Auth
{
   protected $project;

   public function __constructor($project = false)
   {
        $this->project = $project;
   }

   public function check($user = false)
   {
     if($user == 'user1')
     {
       $this->project = 1;
     }

      return $this;
   }

   public function project()
   {
       return $this->project;
   }
}
类身份验证 { 公共功能检查($user=false) { $project=false;//以某种方式将其公开 如果($user=='user1'){ (yield'project'=>$project);//公开 } 退还$this; } }
稍后,您可以通过以下方式发现它:

$auth = new Auth ();
$auth->check ('user1');
echo $auth->project; // 1
$array=iterator_to_array($auth->check($user));
//数组(1){[“项目”]=>bool(false)}
但是为了使用它,您将无法使用方法链接,bec。无论如何,您都需要检索生成器,因此最好修改发现
$project
的方法

class Auth
{
   protected $project;

   public function __constructor($project = false)
   {
        $this->project = $project;
   }

   public function check($user = false)
   {
     if($user == 'user1')
     {
       $this->project = 1;
     }

      return $this;
   }

   public function project()
   {
       return $this->project;
   }
}
然后您可以执行以下操作:

$auth = new Auth();
$auth->check('user1')->project(); // returns 1
或者,如果需要,也可以在构造函数中为
$project
设置另一个默认值

$auth = new Auth($other_default_value);
$auth->check('user2')->project();  // returns $other_default_value
然后您可以执行以下操作:

$auth = new Auth();
$auth->check('user1')->project(); // returns 1
或者,如果需要,也可以在构造函数中为
$project
设置另一个默认值

$auth = new Auth($other_default_value);
$auth->check('user2')->project();  // returns $other_default_value

我相信你的问题基本上是关于方法链接和魔法方法

正在尝试运行以下命令:


我相信你的问题基本上是关于方法链接和魔法方法的问题

正在尝试运行以下命令:


$auth->project;工作但$auth->check()->project;未给出错误,因为$project是类not function的属性。函数没有属性。。属性是用于类的。。因此类返回自身的实例,这就是为什么通过函数可以访问类的属性。函数/方法不包含任何属性哈哈,我的问题是它不工作。您的$auth->project也不起作用;工作但$auth->check()->project;未给出错误,因为$project是类not function的属性。函数没有属性。。属性是用于类的。。因此类返回自身的实例,这就是为什么通过函数可以访问类的属性。函数/方法不包含任何属性哈哈,我的问题是它不工作。试图获取非对象$auth->project的属性时,您的操作无效;工作但$auth->check()->project;没有给出错误,好的,提出了观点。我认为语法是用来尝试访问函数中的变量的。由于用户不了解类变量,我的假设是他们不会理解返回自身实例的类;工作但$auth->check()->project;没有给出错误,好的,提出了观点。我认为语法是用来尝试访问函数中的变量的。由于用户不了解类变量,我的假设是他们不会理解返回自身实例的类应该是
$this->project=1打字
$thisproject=1应该是
$this->project=1