如何调用类外的变量
$dbhost = "localhost";
$dbname = "ffff";
$dbuser = "cccc";
$dbpwd = "123456";
$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);
self::closedata();
return $row["date"];
}
}
回复讨论(解决方案)
// 链接数据库
function opendata($database){
include("../data/a.php");
}
或者定义成常量
你在类定义外面 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"]; }}
非常感谢以上两位高手,然后我想把获取变量的代码放在构造函数可以吗,因为我在别的方法里也会用到有些变量,那不是又要引用一次,但是构造函数的多个变量如何返回(return)呢?
class mydatabase{
private $myhost;
private $myuser;
private $mypwd;
public function __construct(){
require_once("../data/a.php");
$this->myhost=$dbhost;
$this->myuser=$dbuser;
$this->mypwd=$dbpwd;
return $this->myhost;
请问这里多个变量如何返回呢,测试如果没有return的话,别的方法获取不到
//echo $dbhost;
}
function opendata($database){
$this->__construct();
$linkid = mysql_connect($this->myhost, $this->myuser, $this->mypwd);
}
}
建议a.php的那些变量写进一个同一个数组,也可改成function 然后return这个数组
命名污染 有时候挺恶心的
一般这些配置信息最好变成常量
非常感谢以上两位高手,然后我想把获取变量的代码放在构造函数可以吗,因为我在别的方法里也会用到有些变量,那不是又要引用一次,但是构造函数的多个变量如何返回(return)呢?
class mydatabase{
private $myhost;
private $myuser;
private $mypwd;
public function __construct(){
require_once("../data/a.php");
$this->myhost=$dbhost;
$this->myuser=$dbuser;
$this->mypwd=$dbpwd;
return $this->myhost;
请问这里多个变量如何返回呢,测试如果没有return的话,别的方法获取不到
//echo $dbhost;
}
function opendata($database){
$this->__construct();
$linkid = mysql_connect($this->myhost, $this->myuser, $this->mypwd);
}
}
第一种方法,用常量,这样在任何地方都可以使用了
../data/a.php
myhost = MYHOST; $this->myuser = MYUSER; $this->mypwd = MYPWD; } function opendata($database){ $linkid = mysql_connect($this->myhost, $this->myuser, $this->mypwd); }}?>
第二种,用config数组
../data/a.php
'localhost', 'myuser' => 'cccc', 'mypwd' => '123456');
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 方法只负责选择数据库和字符集设置,任务单一
特此感谢版主和各们高手的热情帮助,非常非常感谢各位!!
推荐阅读
-
帮忙看下如何把下面代码调用每月的数据改成调用所有数据或某年份的数据
-
Struts调用Spring服务类的三种方法 博客分类: 99_杂项 SpringStrutsIOC配置管理项目管理
-
操作一条外链需要多久?一条外链是如何做到日IP200的引流?
-
如何做好网站建设与外链推广?2016网站建设外链推广的最新方法
-
php 子类如何访问父类的静态方法
-
用命名空间解决brophp中的反复调用model类的bug
-
如何学好面向对象?类写法的困惑
-
类名是变量的话怎么调用
-
thinkphp中的js中如何识别foreach volist中的变量?
-
调用 getResourceAsStream 获取类路径下的文件对应的输入流.