Php-调用静态函数

时间:2015-08-03 16:04:01

标签: php mysql class function-call

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

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

控制页面上的

<?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")

我需要这样澄清

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

2 个答案:

答案 0 :(得分:2)

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

商店:

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

得到:

return self::$object[$index];

通过快速浏览,您可以意识到Get函数不会返回存储的内容,因为对象与对象不是同一个数组。这是错字

修复后,一切都应该正常工作,使用System :: Get你只需从mysql类中获取一个实例,然后你就像往常一样调用该方法。

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

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

我们将其分为两部分。 System::Get('db')通过将db string作为索引发送来调用System中的静态函数。如globals.php中所述,mysql实例在'db'索引中初始化,以便返回一个mysql元素。

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

希望我帮助过。

答案 1 :(得分:0)

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

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

现在您的具体电话: System :: Get(&#39; db&#39;) - &gt;执行(&#34; DELETE FROM users WHERE id = 2&#34;); System类是一个静态类,它将类的实例作为singloton进行管理。所以你可以在任何地方打电话给那些像“&#39; db&#39 ;;

这样的单个时段

System :: Get(&#39; db&#39;):返回&#39; db&#39;的单周期。类。它是一个非静态的对象。

System :: Get(&#39; db&#39;) - &gt;执行:调用函数&#39;执行&#39; &#39; db&#39;类。 &#39; db&#39; class必须是不同存储之间的负载均衡器。您的配置必须设置为mysql。所以System :: Get(&#39; db&#39;) - &gt;执行必须调用mysql-&gt;执行()。

注意:&#34; DELETE FROM users WHERE id = 2&#34; =&GT;如果&#39; id&#39;是主键,在查询结束时添加&#39; LIMIT 1&#39;。它在删除1行后停止查询。