改变从这个::到此调用函数的方式 - >

时间:2013-01-17 13:32:07

标签: php function call

这就是......我有一个带有一些函数的简单类,但我需要改变调用这些函数的方式。

本来这个班级看起来像这样

<?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 个答案:

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

如果不清楚,请告诉我,我会尝试更好地解释。