我是OOP的新手,所以这可能是一个非常天真的问题;但每当我尝试使用$this->var
语法将类局部变量传递到该类中的函数时,它会在我的IDE(NetBeans)中标记语法错误。
我已尝试将其包含在括号中({$this->var}
和$this->{var}
),但似乎都无效。
这是我的代码:
class password_class {
public $stretch = 1;
public $salt = 'DEFINE_SALT';
public $algo = 'sha256';
function create_salt() {
$this->salt = md5(rand()).uniqid();
}
function hash_pass($pass, $this->algo, $this->salt, $this->stretch) {
}
}
我实际上并不打算将其用于密码安全措施;看到类变量/函数的使用更多的是测试(这将是我第一次创建和调用我自己的类)。
非常感谢任何帮助!
答案 0 :(得分:3)
如果使用实例属性,则在OOP中,您不需要将它们作为参数传递。事实上,如果你想使用$this->algo
等等,你可以这样做:
function hash_pass($pass) {
// example statement
$var = hash($this->algo, $this->salt . $pass);
}
此外,如果你需要参数,你可以这样做:
function hash_pass($pass, $algo = null, $salt = null, $stretch = null) {
if ($salt === null)
$salt = $this->salt;
// other if like this
// example statement
$var = hash($algo, $salt . $pass);
}
答案 1 :(得分:2)
您无法将默认方法/函数参数设置为对象的字段。你必须重写它:
function hash_pass($pass, $algo = null, $salt = null, $stretch = null) {
$alog = $algo == null ? $this->algo : $algo;
$salt = $salt == null ? $this->salt : $salt;
$stretch = $stretch == null ? $this->stretch : $stretch;
}
作为@Aurelio De Rosa pointed out,您不必将实例变量传递给方法;他们已经在你身边了。