如何调用类外的变量

hicoo 2014-06-07 10:15:33
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"];
 }

}
...全文
322 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hicoo 2014-06-10
  • 打赏
  • 举报
回复
特此感谢版主和各们高手的热情帮助,非常非常感谢各位!!
xuzuning 2014-06-10
  • 打赏
  • 举报
回复
#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 方法只负责选择数据库和字符集设置,任务单一
hicoo 2014-06-10
  • 打赏
  • 举报
回复
to fdipzone: 经再次测试,您的第二个方法用数组,把require_once改成include,然后一切正常,问题解决,这是为何??
hicoo 2014-06-10
  • 打赏
  • 举报
回复
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 求解?
傲雪星枫 2014-06-10
  • 打赏
  • 举报
回复
引用 9 楼 xuzuning 的回复:
#6 第二方案的代码是错误的! 虽然是示例代码,但既然是教人家怎么做,怎么说也得是经过测试的吧? 1、载入参数使用了 require_once,这就表示被加载的数据只会被加载一次 那么,当需要实例化两个 mydatabase 时,就只有第一个能获得参数 2、在 opendata 执行了 $this->__construct() 基于错误1,当执行 mydatabase 方法是,由于未能加载参数文件,将导致数据库连接不上
當時只考慮提供思路,然後看到樓主的程序,直接就把這句複製過來,以後會注意的,謝謝指正問題。
hicoo 2014-06-07
  • 打赏
  • 举报
回复
非常感谢以上两位高手,然后我想把获取变量的代码放在构造函数可以吗,因为我在别的方法里也会用到有些变量,那不是又要引用一次,但是构造函数的多个变量如何返回(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); } }
傲雪星枫 2014-06-07
  • 打赏
  • 举报
回复
引用 3 楼 hicoo 的回复:
非常感谢以上两位高手,然后我想把获取变量的代码放在构造函数可以吗,因为我在别的方法里也会用到有些变量,那不是又要引用一次,但是构造函数的多个变量如何返回(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

<?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']);
    }

}
?>
风.foxwho 2014-06-07
  • 打赏
  • 举报
回复
你要多看基础哦

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"];
         
    }

}
xuzuning 2014-06-07
  • 打赏
  • 举报
回复
// 链接数据库 function opendata($database){   include("../data/a.php");  } 或者定义成常量 你在类定义外面 require_once("../data/a.php") 将导致数据库相关参数变成全局变量,可能会覆盖掉同名变量 也可以通过 $GLOBALS 数组轻易的观察到
Phil-Pan 2014-06-07
  • 打赏
  • 举报
回复
一般这些配置信息最好变成常量
智商众筹 2014-06-07
  • 打赏
  • 举报
回复
建议a.php的那些变量写进一个同一个数组,也可改成function 然后return这个数组 命名污染 有时候挺恶心的
该课程由付强老师主讲,系统的、全面的、具体的讲解了java入门的知识。可以使初级的学员入门。Java入门Java的历史、Java的版本、Java的优势、软件行业前景Java开发环境搭建、编写Java入门练习虚拟机的运行机制、Java的平台无关性、虚拟机垃圾回收机制基础语法关键字、标识符、Java数据类型分类、基础数据类型、取值范围变量、常量、三种注释、生成doc文档、运算符、表达式if语句、switch语句、嵌套判断for语句、while语句、do-while语句、嵌套循环类和对象面向过程和面向对象的区别类的构成、访问修饰符、对象的内存分配this关键字、按值传递与按引用传递、对象的初始化顺序高级类特性类的继承、父子类的初始化顺序、单继承性方法的覆盖、重载、super关键字、多态、instanceof关键字、强制类型转换、static关键字、final关键字数组和枚举一维数组的应用及内存分配多维数组的应用及内存分配数组的复制、数组的按引用传递排序算法:冒泡、直接选择、插入选择、希尔、快速、归并、堆排序Arrays工具类的应用枚举类型的应用常见类的使用Object类的底层及应用、Objects类String类的底层及应用、正则表达式StringBuffer和StringBuilder的底层及应用Math类的应用、包装类的应用日期类的应用:Date、DateFormat、Calendar、LocalDateTime、Instant、LocalDate、MonthDay、ZonedDateTime、YearMonth、新旧日期转换BigInteger和BingDecimal、DecimalFormatSystem类、Scanner类抽象类和接口抽象类的规则及应用接口的规则及应用默认方法、静态方法、函数式接口、Lambda表达式异常异常的定义异常的处理:抓(try-catch-finally)、抛(throws)异常的分类、自定义异常的应用、throw关键字集合框架集合框架结构:接口、实现类Collection接口的方法、Set接口的方法、List接口的方法、Map接口的方法Array、Linked、Hash、Tree底层实现原理泛型的作用、Collections工具类、历史集合类I/O流Path类的原理及应用、Files类的原理及应用文件字节流FileInputStream的原理及应用对象类、缓冲流、数据流的原理及应用字符流的原理及应用多线程进程与线程的概念、查看线程对象Java内存模型线程的创建与启动:扩展Thread类、实现Runnable接口、实现Callable接口、线程池线程状态的转换:新建、就绪、运行、阻塞、死亡线程的调度:sleep、yield、join、interrupt、wait后台线程、定时任务线程的并发与同步、同步锁、同步块、线程安全的类Lock接口、CAS、volatile修饰符内部类成员内部类、本地内部类的应用匿名内部类的原理及引用、Lambda表达式设计模式基础设计模式概念、框架概念7大设计原则:开闭原则、依赖倒置原则、单一职责原则、接口隔离原则、迪米特原则、里氏替换原则、合成复用原则单例模式、工厂模式、模板模式、代理模式、装饰模式、适配器模式、外观模式、策略模式、观察者模式、命令模式、备忘录模式、观察者模式反射反射包Class类的使用反射获取类属性、方法、构造器通过反射创建类对象/通过反射调用方法反射的应用

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧