ホームページ >バックエンド開発 >PHPチュートリアル >クラス外で変数を呼び出す方法

クラス外で変数を呼び出す方法

WBOY
WBOYオリジナル
2016-06-23 13:55:371673ブラウズ

a.php ページはデータリンク変数です
$dbhost = "localhost";
$dbuser = "cccc";
$dbprefix = "user";
$db_ language = "gbk";

b.php ページ クラスには、さまざまなデータベース操作関数が含まれています
require_once("../data/a.php");
class mydatabase{

// データベースへのリンク
function opendata ($database){
このメソッドでクラス外のすべての変数を取得する方法
}


//レコードをクエリする
function ReadOne($database){
self::opendata($database)
$ rs = mysql_query; ("SELECT * from fcc where id=1");
$row = mysql_fetch_array($rs);
return $row["date"] }




ディスカッションへの返信(解決策)

// データベースをリンクする

function opendata($database){ include("../data/a.php")
}

または定数として定義する


You Outsideクラス定義 require_once("../data/a.php")
により、データベース関連のパラメータがグローバル変数になり、同じ名前の変数が上書きされる可能性があります
$GLOBALS 配列を通じて簡単に確認することもできます

もっと知りたいです 基本を見てください

require_once("../data/a.php");class mydatabase {    // 链接数据库    function opendata($database) {        //方法一        global $dbhost , $dbname , $dbuser , $dbpwd , $dbprefix , $db_language;        //方法二        require_once("../data/a.php");        //方法三        //在a.php把变量全部定义成常量        define('DB_HOST' , 'test');        //调用的时候直接 使用DB_HOST        echo DB_HOST;             }    //查询一条记录    function ReadOne($database) {        self::opendata($database);        $rs = mysql_query("SELECT * from fcc where id=1");        $row = mysql_fetch_array($rs);        self::closedata();        return $row["date"];             }}


上記の 2 人の専門家に感謝します。次に、変数を取得するコードをコンストラクターに置きたいと思います。他のメソッドでもいくつかの変数を使用するため、やめてください。もう一度引用する必要がありますが、コンストラクターの複数の変数を返すにはどうすればよいでしょうか?
クラス mydatabase{

プライベート $myuser;


パブリック関数 __construct(){

$this->myhost = $dbhost;

$this->myuser=$dbpwd;
return $this->myhost; テストで複数の変数を返すにはどうすればよいですか? , 他の方法では取得できません
//echo $dbhost;
}

function opendata($database){
$this->construct();
$linkid = mysql_connect($this->myhost, $ this- >myuser, $this->mypwd);
}
}

a.php の変数を同じ配列に書き込むか、それを関数に変更して返すことをお勧めします。配列
名前付けの汚染は時々非常に嫌なものです

一般に、これらの設定情報を定数に変換するのが最善です


上記の 2 人の専門家に感謝します。次に、変数を取得するコードをコンストラクターに入れたいと思います。他のメソッドでもいくつかの変数を使用しますが、それを再度参照する必要があるという意味ではありませんが、コンストラクターの複数の変数を返すにはどうすればよいでしょうか。
クラス mydatabase{
プライベート $myuser;

パブリック関数 __construct(){

$this->myhost = $dbhost;

$this->myuser=$dbpwd;
return $this->myhost; テストで複数の変数を返すにはどうすればよいですか? , 他の方法では取得できません

//echo $dbhost;

}

function opendata($database){

$this->construct();
$linkid = mysql_connect($this->myhost, $ this- >myuser, $this->mypwd);
}

}


最初の方法は、どこでも使用できるようにすることです


../data/a.php

<?php    define('MYHOST', 'localhost');    define('MYUSER', 'cccc');    define('MYPWD', '123456');?>

<?phprequire_once("../data/a.php");class mydatabase{    private $myhost;    private $myuser;    private $mypwd;    public function __construct(){        $this->myhost = MYHOST;        $this->myuser = MYUSER;        $this->mypwd = MYPWD;    }    function opendata($database){        $linkid = mysql_connect($this->myhost, $this->myuser, $this->mypwd);    }}?>



2番目に、config arrayを使用します


../data/a.php

<?phpreturn array(    'myhost' => 'localhost',    'myuser' => 'cccc',    'mypwd' => '123456');

<?phpclass mydatabase{    private $dbConfig = array();    public function __construct(){        $this->dbConfig = require_once("../data/a.php");    }    function opendata($database){        $this->__construct();        $linkid = mysql_connect($this->dbConfig['myhost'], $this->dbConfig['myuser'], $this->dbConfig['mypwd']);    }}?>

to fdipzone:
我按你第二个方法用数组,然后有点问题,调试的时候在构造函数最后输出数组print_r($this->dbConfig); 
输出结果为:Array ( [myhost] => localhost [myuser] => cccc [mypwd] => 123456 ) Array ( [myhost] => [myuser] => [mypwd] => )
输出为两个数组,第一个正常,第个值为空,
然后我再在方法opendata中输出数组:$this->__construct();  print_r($this->dbConfig); 此方法中输出只显示:Array

求解?

to fdipzone:
经再次测试,您的第二个方法用数组,把require_once改成include,然后一切正常,问题解决,这是为何??

#6 第二方案的代码是错误的!
虽然是示例代码,但既然是教人家怎么做,怎么说也得是经过测试的吧?

1、载入参数使用了 require_once,这就表示被加载的数据只会被加载一次
  那么,当需要实例化两个 mydatabase 时,就只有第一个能获得参数
2、在 opendata 执行了 $this->__construct() 基于错误1,当执行 mydatabase 方法是,由于未能加载参数文件,将导致数据库连接不上

正确的写法是

class mydatabase{  private $linkid;  public function __construct(){    $dbConfig = include("../data/a.php");    $linkid = mysql_connect($dbConfig['myhost'], $dbConfig['myuser'], $dbConfig['mypwd']);  }  function opendata($database, $charset='utf8'){    mysql_select_db($database, $this->linkid);    mysql_query("set names $charset", $this->linkid);  }}

1、参数文件文件敏感,不应保存在对象中。需要时加载,用完就丢
2、一个数据库类只对应一个数据库连接,所以数据库连接应在构造函数中完成
3、opendata 方法只负责选择数据库和字符集设置,任务单一

特此感谢版主和各们高手的热情帮助,非常非常感谢各位!!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。