-5

事情就是这样……我有一个带有一些函数的简单类,但我需要更改调用这些函数的方式。

原来的类是这样的

<?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'])

我知道这也许是一个简单的问题,但我需要澄清一些概念......

4

4 回答 4

3

使您的功能非静态。

并对类和对象进行一些阅读。为了使用->,你必须实例化你的类。

于 2013-01-17T13:33:37.847 回答
1

听起来您不知道公共和静态之间的区别。

静态意味着您不需要实例来调用函数。

如果要使用箭头,则需要先公开函数并创建实例。

你必须做的:

//首先创建类的实例

$bcrypt = new Bcrypt();

//调用实例变量并选择你的函数

$bcrypt->hash($data['password']);

了解静态和公共之间的区别非常重要。我希望它对你有帮助!

于 2013-01-17T13:41:43.687 回答
0

函数调用的语法由函数是否存在决定static,所以直接的答案是“static从函数声明中删除关键字”。

然而,一种方法的存在static与否决不应该是一个偏好问题;这应该是一个设计决定static您没有说明为什么需要进行此更改,发布的代码中没有任何内容提供相关提示,在这种情况下,首先将方法放在首位似乎完全可以。

所以这就留下了一个问题:你为什么要问?

于 2013-01-17T13:37:26.423 回答
0

有 3 种方法可以调用方法或变量。

来自类外部的静态变量/方法

 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();

如果不清楚,请告诉我,我会尽力解释得更好。

于 2013-01-17T13:41:22.107 回答