方法中的php类方法
如果我想访问public方法,我可以很容易地做到这一点。但是如果我想在方法中访问属性,我应该怎么做,建议这样做吗 我可以在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; } } } 而不是
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代码>