当前位置: 首页 > news >正文

php类调用类外变量吗,如何调用类外的变量

a.php页面是数据链接变量

$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 方法只负责选择数据库和字符集设置,任务单一

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

相关标签:调用 变量

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

相关文章:

  • matlab中单相整流器,一种新型单相脉冲整流器的MATLAB仿真研究
  • matlab中支持向量机网格,MATLAB中SVM(支持向量机)的用法
  • mysql出现帮助,MySQL之帮助的使用
  • 不会matlab下载,下载的用MATLAB实现的DTW算法,不会用,跪求大神帮忙
  • mysql序列号重置,当我们更改小于当前序列号的AUTO_INCREMENT值时,MySQL将返回什么?...
  • mysql聚合函数详解,MySQL常用聚合函数详解
  • php 年月日自动更新,php生成年月日下载列表的方法
  • java 去掉字符串中的注释,Python删除Java源文件中全部注释的实现方法
  • 如何修改oracle储存路径,oracle中如何修改表空间的数据文件路径
  • php读取excel怎么读取sheet2,PHP读取Excel 之 Spreadsheet_Excel_Reader
  • oracle新建用户和实例,Oracle新建用户、角色,授权,建表空间实例(1/2)
  • oracle10gsys默认,Oracle数据库sys和system用户的默认密码及如何修改密码
  • oracle 06502 解决,【故障解决】ORA-06502错误解决
  • oracle杀死j2ee,J2EE下的oracle数据库备份方法
  • linux将一个进程变成守护进程,Linux 守护进程原理
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【面试系列】之二:关于js原型
  • CSS 三角实现
  • Elasticsearch 参考指南(升级前重新索引)
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Hibernate最全面试题
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • isset在php5.6-和php7.0+的一些差异
  • Java IO学习笔记一
  • JavaScript设计模式系列一:工厂模式
  • java概述
  • Python连接Oracle
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 测试开发系类之接口自动化测试
  • 面试总结JavaScript篇
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 网络应用优化——时延与带宽
  • 新书推荐|Windows黑客编程技术详解
  • 译自由幺半群
  • 原生js练习题---第五课
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 【干货分享】dos命令大全
  • AI算硅基生命吗,为什么?
  • 第二十章:异步和文件I/O.(二十三)
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • ​学习一下,什么是预包装食品?​
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #大学#套接字
  • (1)虚拟机的安装与使用,linux系统安装
  • (Java数据结构)ArrayList
  • (vue)页面文件上传获取:action地址
  • (万字长文)Spring的核心知识尽揽其中
  • (转) Face-Resources
  • (转)德国人的记事本
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • *1 计算机基础和操作系统基础及几大协议
  • .NET Core中Emit的使用
  • .net 托管代码与非托管代码
  • .net2005怎么读string形的xml,不是xml文件。