Php 将调用函数的方式从this::更改为this->;

Php 将调用函数的方式从this::更改为this->;,php,function,call,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) {

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

原来这个班是这样的

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

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

使您的函数非静态


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

函数调用的语法取决于函数是否是静态的,因此直接的答案是“从函数声明中删除
静态的
关键字”

然而,一个方法是否是静态的决不应该是一个偏好的问题;这应该是一个设计决策。您没有说明为什么需要进行此更改,发布的代码中没有提供相关提示的内容,在这种情况下,首先将方法设置为
static


这就留下了一个悬而未决的问题:为什么要问?有三种方法可以调用方法或变量

类外部的静态变量/方法

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

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

听起来你不知道公共和静态的区别

静态意味着您不需要像您这样使用实例来调用函数

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

你必须做的是:

//首先创建类的实例

$bcrypt = new Bcrypt();
//调用实例变量并选择函数

$bcrypt->hash($data['password']);
了解静态和公共的区别是非常重要的。
我希望它能帮助你

为什么不能这样做:$this->bcrypt::hash($data['password']);看,你真的知道这些操作符的意思吗?(相关)然后读@Gordon的链接我只是尝试一下,但我得到:致命错误:调用非对象上的成员函数hash(),这是实例化部分。您需要创建一个对象,首先对其调用方法。这是绝对基本的OO编程,所以你至少应该读一读$bcrypt=新的bcrypt();好啊我读到关于。。我有点沮丧。。有些人似乎生来就知道这类事情,但我不知道。。你能给我更明确的指导吗??