【问题标题】:Change the way to call a function from this :: to this -> [closed]将调用函数的方式从 this :: 更改为 this -> [关闭]
【发布时间】:2013-01-01 01:27:07
【问题描述】:

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

原来这个类是这样的

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

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

【问题讨论】:

标签: php function call


【解决方案1】:

使您的函数非静态。

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

【讨论】:

  • 我只是尝试一下,但我得到:致命错误:在非对象中调用成员函数 hash()
  • 这是实例化部分。您需要首先创建一个对象来调用您的方法。这绝对是基本的 OO 编程,因此您至少应该阅读一下。 $bcrypt = new Bcrypt();
【解决方案2】:

函数调用的语法由函数是否为static决定,所以直接回答是“从函数声明中去掉static关键字”。

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

那么问题来了:你为什么要问?

【讨论】:

    【解决方案3】:

    您可以通过 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();
    

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

    【讨论】:

    • 好吧..我读过但是..我有点沮丧..有些人似乎天生就知道这种事情,但我不..你能给我更明确的指导吗这个??
    【解决方案4】:

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

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

    如果你想使用箭头,你需要先公开你的函数并创建一个实例。

    你必须做什么:

    //先创建类的实例

    $bcrypt = new Bcrypt();
    

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-26
      • 2021-08-15
      • 1970-01-01
      • 2020-10-10
      • 2013-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多