2017-02-17 75 views
-1

更改变量的值我有这样的代码在PHP中:只有内部功能

class PhpClass { 
    private static $name = 'Test name'; 
    private static $access = 'Test access'; 

    public static function checkData($param=NULL) { 
     if ($param) { 
      self::$name = $param['name']; 
      self::$access = $param['access']; 
     } 

     //Rest of the function 
    } 
} 

所以,基本上我需要的是保持VAR $name$access总是有默认值,每次我调用该函数checkData(),但只有在传递参数时才更改该函数内的值。

例如,如果调用函数是这样的:

function functionToCheckData() { 
    $class = new PhpClass(); 

    $param = [ 
     'name' => 'Another name', 
     'access' => 'Another access' 
    ]; 

    $class->checkData($param); //$name and $access should be "another name" and "another access" 
    $class->checkData(); //$name and $access should be "test name" and "test access" 
} 

每次我调用该函数checkData()我想要的变量有默认值。是否有可能实现?

回答

1

您在这里没有使用static。阅读关于静态here

你需要做什么:

class PhpClass { 
    private $name = 'Test name'; 
    private $access = 'Test access'; 

    public static function checkData($param=NULL) { 
     if ($param) { 
      $this->name = $param['name']; 
      $this->access = $param['access']; 
     } else { 
      $this->name = 'Test name'; 
      $this->access = 'Test access'; 
     } 

     //Rest of the function 
    } 
} 
+0

我尝试这样做,它返回此错误:'不用时对象context'使用$此。另外,是否有必要使用'else'部分?重新声明一个已经是默认值的值似乎是多余的。这正是我想要避免的。 – celsomtrindade

+0

我刚刚测试过它,它工作正常。确保你复制它的权利。如果没有设置'$ param',你必须告诉它要使用什么。如果你希望你的修改是临时的,那么在'checkData'中声明'$ name'和'$ access'作为局部变量。 – zed

0

您正在使用同一个对象。所以它会覆盖它。

试试这个:

<?php 
    class PhpClass { 
    private $name = 'Test name'; 
    private $access = 'Test access'; 

    public function checkData($param=NULL) { 
     if ($param) { 
      $this->name = $param['name']; 
      $this->access = $param['access']; 
     } 
     echo $this->name."<br>"; 
     //Rest of the function 
    } 
} 
function functionToCheckData() { 
    $class = new PhpClass(); 

    $param = [ 
     'name' => 'Another name', 
     'access' => 'Another access' 
    ]; 

    $class->checkData($param); //$name and $access should be "another name" and "another access" 
    $class1 = new PhpClass(); 
    $class1->checkData(); //$name and $access should be "test name" and "test access" 
} 
functionToCheckData();