【问题标题】:How can I use variable from class in another class如何在另一个类中使用类中的变量
【发布时间】:2014-04-04 12:08:36
【问题描述】:

我想调用一个类中的方法,使用来自另一个类的数据库连接。

initializing.php

// load the configs, AFTER this I SHOULD HAVE CONSTANTS
require_once('myconfigs.php');

// load some function , some HELPER
require_once(LIB_PATH.DS.'functions.php');

// load the core objects
require_once(LIB_PATH.DS.'database.php');
$database = MySQLDatabaseConnection::connection();

the database.php

require_once('myconfigs.php');

require_once(LIB_PATH.DS.'initializing.php');

class MySQLDatabaseConnection {

    private static $instance;

    private function __construct(){

    }

    private function __clone(){

    }

    public static function connection(){

        if ( !isset( self::$instance ) ) {
            self::$instance = new MySQLi(DBSERVER, DBUSER, DBPASSWORD, DBNAME);
            if ( self::$instance->connect_error ) {
                throw new Exception('MySQL connection failed: '. self::$instance->connect_error);
            }
        }

        return self::$instance;

    }



}

the listproducts.php

这是为了一些测试,之后在 DbPlus 类中我想创建 CRUD 方法,但看起来简单的 echo 不起作用:/

require_once('initializing.php');

class DbPlus extends MySQLDatabaseConnection{

    public $database = parent::connection();

    public function read(){
        $query = "SELECT name, price_in, price_out, category_products_id FROM products";
        $data = $database->query($query);

        while ( $row = $data->fetch_object()) {
            echo $row->name;
        }
    }

}

$dbplus = new DbPLus;
$dbplus->read();

我收到这个错误

解析错误:语法错误,意外 '(',期待 ',' 或 ';' in D:\XAMPP\htdocs\xxx\includes\listproducts.php 在第 19 行

我不知道意外的 '(' 来自哪里。

有什么想法吗?谢谢

【问题讨论】:

标签: php oop singleton crud


【解决方案1】:

您的 listproducts.php

存在一些严重问题

你应该在constructor上做这个作业

public $database = parent::connection(); //<--- This gave you a syntax error.

像这样……

  public $database;
    function __construct()
    {
     $this->database = parent::connection();
    }

接下来是你的read(),你需要使用$this关键字..

应该是..

public function read(){
        $query = "SELECT name, price_in, price_out, category_products_id FROM products";
        $data = $this->database->query($query);   //<---- Do this way..

固定代码..

<?php
require_once('initializing.php');

class DbPlus extends MySQLDatabaseConnection{

    public $database;
    function __construct()
    {
     $this->database = parent::connection();
    }

    public function read(){
        $query = "SELECT name, price_in, price_out, category_products_id FROM products";
        $data = $this->database->query($query);

        while ( $row = $data->fetch_object()) {
            echo $row->name;
        }
    }

}

$dbplus = new DbPLus;
$dbplus->read();

【讨论】:

  • 来自PHP docs的参考:This declaration may include an initialization, but this initialization must be a constant value--that is, it must be able to be evaluated at compile time and must not depend on run-time information in order to be evaluated.
  • 感谢 Mark ,它给出了一个解析错误,因为代码行在 constructor 之外,所以它必须与运行时相关吗?
  • 它需要 执行 parent::connection(); 来获取要分配的值的事实意味着它需要运行时信息才能被评估
  • 谢谢你,马克,知道为什么我的回答被否决了吗?
  • @ShankarDamodaran - 不知道为什么反对票,我通过反对票反对它
【解决方案2】:

尝试这样的事情并告诉我:

$dbplus = new DbPLus();
$dbplus->read();

同时提供您正在使用的 PHP 版本

【讨论】:

  • 括号无所谓:)
猜你喜欢
  • 1970-01-01
  • 2014-10-06
  • 2020-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多