Php- 调用静态函数

Php- calling static function

我正在观看有关使用 OOP 的 CMS 的教程 - PHP

我需要知道如何从同一文件中的 class 或包含

调用 public 静态函数

在控制页面上:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

require_once('globals.php'); 



if(System::Get('db')->Execute("DELETE FROM `users` WHERE `id`= 2"))
{
    echo "Done";
}
else
{
    echo "No";
}
?>  

system.php :

<?php
class System
{
    //objects array
    private static $objects = array();


    //store object

    public static function Store($index,$value)
    {
        self::$objects[$index] = $value;
    }

    //return object

    public static function Get($index)
    {
        return self::$object[$index];
    }
}
?>

globals.php

<?php

define('ROOT',dirname(__FILE__));
define('INC',ROOT.'/includes/');
define('CORE',INC.'/core/');
define('MODELS',INC.'/models/');
define('CONTROLLERS',INC.'/controllers/');
define('LIBS',INC.'/libs/');

/*
core files
*/
require_once(CORE.'config.php');
require_once(CORE.'mysql.class.php');
require_once(CORE.'raintpl.class.php');
require_once(CORE.'system.php');

System::Store('db',new mysql());
System::Store('tpl',new RainTPL()); //class RainTPL
?>

mysql.php

<?php

/*
 * 
 */

/**
 * Description of mysqli
 *
 * @author syam
 */


class mysql {
    private $connection;
    private $last; //last query




    public function __construct() {
        $this->dbconnect();
        $this->Execute('SET NAMES utf8');
    }




    public function dbconnect()
    {

        $this->connection = new mysqli(HOSTNAME,USERNAME,PASSWORD,DBNAME);
        if($this->connection)
            return TRUE;

        return FALSE;
    }





    public function Execute($query)
    {
       //$query = $this->connection->real_escape_string($query);
        if($result = $this->connection->query($query))
        {
            $this->last = $result;
            return TRUE;
        }
        return FALSE;
    }
}

我需要更多说明

他正在以这种方式从 class 系统调用函数

System::Get('db')->Execute("DELETE FROM `users` WHERE `id`= 2")

我需要这种方式的说明

并且需要知道如何以正确的方式调用静态函数

调用外部静态函数 class : {类名}::{StaticFunctionName}();

在内部调用静态函数 class : self::{StaticFunctionName}();

现在您的具体电话: System::Get('db')->执行("DELETE FROM users WHERE id= 2"); class 系统是一个静态的 class 系统,它将 classes 的实例作为单例进行管理。所以你可以到处调用这些单子,比如 'db';

System::Get('db') : return 'db' class 的单子。它是一个非静态对象。

System::Get('db')->执行:调用'db'class的函数'Execute'。 'db' class 必须是不同存储之间的负载均衡器。您的配置必须设置为 mysql。所以 System::Get('db')->Execute 必须调用 mysql->Execute().

注意:"DELETE FROM users WHERE id= 2" => 如果 'id' 是主键,则在查询末尾添加 'LIMIT 1'。删除 1 行后停止查询。

通过查看您的源代码,我们可以看到系统 class,根据定义,它有两个方法:

商店:

self::$objects[$index] = $value;

得到:

return self::$object[$index];

快速浏览一下,您会发现 Get 函数不会 return 存储任何内容,因为对象与对象不是同一个数组。这是一个 错别字

修复此问题后,一切都应该正常工作,通过使用 System::Get,您只需从 mysql class 获取实例,然后照常调用该方法即可。

编辑:根据要求,这里是对这段代码的解释:

System::Get('db')->Execute("DELETE FROM `users` WHERE `id`= 2")

让我们把它分成两部分。 System::Get('db') 通过发送数据库字符串作为索引从系统调用获取静态函数。如 globals.php 中所述,mysql 实例在 'db' 索引中初始化,因此 return 一个 mysql 元素。

其次,-> 基本上调用元素的内部方法,所以这意味着基本上你会做类似于 $mysql->Execute(..) 的事情。在这种情况下,此方法需要一个字符串作为查询,因此您基本上是将其作为参数发送,然后在 mysql.php.

中执行

希望我有所帮助。