【问题标题】:Use function and static method使用函数和静态方法
【发布时间】:2017-01-13 15:05:11
【问题描述】:

在一个表类中,我想使用简单的函数,也想使用静态函数,我该怎么做? 这是我当前的代码(不起作用)

在我的控制器中,我只想做:Table::get('posts'),它直接调用函数check_table($table)

<?php
namespace Fwk\ORM;
use Fwk\Application;
use Fwk\Database\Database;

class Table extends Application {

    public function __construct()
    {
        $this->db = new Database();
    }

    public static function get($table) {
        if($this->check_table($table)) {
            return "ok";
        }

    }
    public function check_table($table) {
        $r = $this->$db->query("SELECT 1 FROM $table");
        return $r;
    }

}
?>

【问题讨论】:

  • 你真的知道为什么你需要静态方法吗?
  • 目前我想要的唯一静态函数是get,但其他的将在接下来的几天内添加。
  • 这将是一个非常糟糕的代码设计,将静态和非静态混合在一起,而且您实际上永远不需要/不应该使用静态方法,因为它们不可测试。而我之前的问题是为什么你需要静态方法。你应该问问自己!
  • 我认为你不能在静态函数中使用它,因为类的所有实例只有一个,然后没有与实例链接
  • 好的,所以在我的情况下,最好有一个包含所有静态方法的文件和另一个包含简单函数的文件?

标签: php function static self construct


【解决方案1】:

您必须准确理解static 的含义。当您将方法声明为静态时,您实际上是在说“可以直接调用此方法而无需实际实例化它的类”。因此,当您使用静态方法时,您将无法访问$this,因为您不在对象上下文中。

您也可以将check_table() 设为静态并将其用作一种工厂:

public static function get($table) {
    if(self::check_table($table)) {
        return "ok";
    }

}
public static function check_table($table) {
    $r = (new Database())->query("SELECT 1 FROM $table");
    return $r;
}

http://php.net/manual/en/language.oop5.static.php

【讨论】:

    【解决方案2】:

    你可以尝试用“self::MethodeName”代替“this->MethodeName”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-27
      • 2013-10-16
      • 2012-05-09
      • 2017-12-19
      • 2023-03-10
      • 2014-10-28
      相关资源
      最近更新 更多