如何调用类外的变量 本帖最后由 hicoo 于 2014-06-07 10:21:04 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 // 链接数据库 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这个数组命名污染 有时候挺恶心的 第一种方法,用常量,这样在任何地方都可以使用了../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); }}?>第二种,用config数组../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 方法只负责选择数据库和字符集设置,任务单一 apache php 发送邮件的问题 不会的php面试题! 新手报到,有html,css和c语言基础,如何学php?想少走弯路,望前辈赐教,谢谢! PHP如何根据访问者的ip判断国家? FireFox PHP 表单提交页面刷新后重复提交 关于SESSION SINA里面有些栏目的左边的滚动图片怎么做出来的?谁能说下思路吗?或者有实例更好~~谢谢了 请大家帮我解决!敬谢 求大神指点 Apache rewrite 规则 想做一个生产加工行业的数据流管理自己用,那位大神给点思路 如何防止页面被iframe,或直接访问? 求帮助,PHP脚本
function opendata($database){
include("../data/a.php");
}或者定义成常量你在类定义外面 require_once("../data/a.php")
将导致数据库相关参数变成全局变量,可能会覆盖掉同名变量
也可以通过 $GLOBALS 数组轻易的观察到
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"];
}}
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<?php
define('MYHOST', 'localhost');
define('MYUSER', 'cccc');
define('MYPWD', '123456');
?>
<?php
require_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);
}}
?>
第二种,用config数组
../data/a.php<?php
return array(
'myhost' => 'localhost',
'myuser' => 'cccc',
'mypwd' => '123456'
);
<?php
class 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']);
}}
?>
我按你第二个方法用数组,然后有点问题,调试的时候在构造函数最后输出数组print_r($this->dbConfig);
输出结果为:Array ( [myhost] => localhost [myuser] => cccc [mypwd] => 123456 ) Array ( [myhost] => [myuser] => [mypwd] => )
输出为两个数组,第一个正常,第个值为空,
然后我再在方法opendata中输出数组:$this->__construct(); print_r($this->dbConfig); 此方法中输出只显示:Array求解?
经再次测试,您的第二个方法用数组,把require_once改成include,然后一切正常,问题解决,这是为何??
虽然是示例代码,但既然是教人家怎么做,怎么说也得是经过测试的吧?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 方法只负责选择数据库和字符集设置,任务单一