Php-调用静态函数


Php- calling static function

我正在看一个关于CMS与OOP - PHP的教程

我需要知道如何调用公共静态函数从类在同一文件或从包含

控件页:

<?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;
    }
}

我需要更多的说明

他以这种方式从类系统调用函数

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

我需要澄清这种方式

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

通过查看源代码,我们可以看到System类,根据定义,它有两个方法:

存储:

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

得到:

return self::$object[$index];

通过快速查看,您可以意识到Get函数不会返回存储的任何内容,因为objects与object不是同一个数组。这是一个打字错误

有了这个被修复,一切都应该正常工作,通过使用System::Get你简单地从mysql类中获得一个实例,然后你只是像往常一样调用方法。

按要求编辑:以下是这段代码的解释:

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

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

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

希望我帮到你。

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

调用静态函数内部类:自我:{StaticFunctionName} ();

现在你的具体呼叫:System::Get('db')->Execute("DELETE FROM users WHERE id = 2");类System是一个静态类,它将类的实例作为单例管理。所以你可以到处调用这些单引号,比如'db';

System::Get('db'):返回'db'类的单元素。它是一个非静态对象。

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

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