这就是......我有一个带有一些函数的简单类,但我需要改变调用这些函数的方式。
本来这个班级看起来像这样
<?php
class Bcrypt {
const DEFAULT_WORK_FACTOR = 8;
public static function hash($password, $work_factor = 0) { ... }
public static function check($password, $stored_hash, $legacy_handler = NULL) { ... }
}?>
现在我需要改变模型调用这个类的方式
最初模型看起来像这样
Bcrypt::hash($data['password'])
我需要做的是将此调用更改为:
$this->bcrypt->hash($data['password'])
我知道也许这是一个简单的问题,但我需要澄清一些概念......
答案 0 :(得分:3)
让你的功能变得非静态。
并对类和对象进行一些阅读。要使用 - &gt;,您必须实例化您的类。
答案 1 :(得分:1)
听起来你不知道公共和静态之间的区别。
静态意味着您不需要实例来调用像您这样的函数。
如果你想使用箭头,你需要公开你的函数并首先创建一个实例。
你必须做什么:
//首先创建类的实例
$bcrypt = new Bcrypt();
//调用实例变量并选择你的函数
$bcrypt->hash($data['password']);
了解静态和公共之间的区别非常重要。 我希望它可以帮到你!
答案 2 :(得分:0)
函数调用的语法由函数static
确定,因此直接答案是“从函数声明中删除static
关键字”。
但是,static
或不属于偏好的方法;它应该是设计决策。您没有说明为什么需要进行此更改,发布的代码中没有任何内容提供相关提示,在这种情况下,方法似乎完全可以static
。{ / p>
这样就留下了问题:你为什么要问?
答案 3 :(得分:0)
有三种方法可以调用方法或变量。
来自类外的静态变量/方法
class Test {
public static function testFunc() {}
}
Test::testFunc();
类中的静态变量/方法
class Test {
public static function testFunc() {}
public static function testFromInside() {
return self::testFunc(); // you can do this with Test::testFunc() as well
}
}
Test::testFromInside();
来自班级内部的非静态变量
class Test {
public $test;
public function testFunc() {
return $this->test;
}
}
$test = new Test;
$test->test;
$test->testFunc();
如果不清楚,请告诉我,我会尝试更好地解释。