【问题标题】:php oop, classes in multiple filesphp oop,多个文件中的类
【发布时间】:2012-02-09 10:11:37
【问题描述】:

我正在为我的客户编写“简单”文件管理器。 注册用户可以上传文件和查看以前上传的文件,管理员可以分别对上传的文件进行操作。文件存储在文件系统中,但其他信息存储在 MySQL 中。

我已经完成了主数据库设置类(db_settings),它具有数据库用户名和密码等属性。

第二个类用于用户认证,这个类扩展了 db_settings 类。 这个类有一个属性,用户对象(属性:用户名、语言等)。

用户登录后在第二类中创建一个新的用户对象。

用户界面是一个页面,通过url参数加载并包含所需的子页面。

子页面根据当前页面与html/php-page和classfile组合。

当用户上传文件并点击“上传文件”时,上传页面(page_upload.php)包含在主页中,然后上传类包含在同一页面中(include_once 'class_upload.php')。

第二个类在 class_upload.php 上扩展,因此每个子类都可以访问顶级方法。

问题是当用户在子页面(即上传页面)时,用户对象没有被填充,因此这些属性不可用。

如何也可以从子页面访问用户对象属性?

我想将类保存在单独的文件中,不想使用自动加载器。

【问题讨论】:

标签: php oop class


【解决方案1】:

听起来您需要一个简单的框架,例如 codeigniter 或 kohana。 如果您不想要这个,请创建一种注册表,在其中加载您绝对需要的所有内容。然后在您使用的每个文件中包含此注册表类。而且自动装弹机还不错……

【讨论】:

    【解决方案2】:

    没有任何真正的代码,这有点难以通过。

    不过,我可以给你这个建议。您扩展课程的方式是一种不好的做法。不要扩展类,因为在当前类中包含某些方法很“方便”。

    在您的主“引导”或“索引”页面上,只需包含几个类文件并实例化几个对象。

    您的“UploadPage”类可以在构造函数中接收 DbSettings 和 Authentication 类。

    希望您不要把这当回事,但您最好先使用一个框架,看看它们是如何做事的。它可能会给您一些更好的设计灵感。

    “我不想使用自动加载器”的要求对我来说似乎很奇怪,但幸运的是,您可以轻松地手动包含类。

    【讨论】:

      【解决方案3】:

      前几句:

      第二类用于用户认证,该类扩展 db_settings 类。这个类有一个属性,用户对象 (属性:用户名、语言等)。

      为什么这个类扩展db_settings,不应该只是使用吗?

      用户界面是一个页面,通过url参数加载并包含所需的子页面。

      我只是希望您正在验证页面参数(针对错误输入,例如:http://my.code.com/file.txt../index(递归包含自身)...)。

      问题答案:

      您可能需要将对象存储在$_SESSION 中(serialized 或普通的,根据您的需要...存储到文件时无论如何都会被序列化,因此您可能需要查看__sleep() and __wakeup() methods )。

      在调用session_start()之前不要忘记include 'class_user.php',这样可以正确初始化对象。

      【讨论】:

        猜你喜欢
        • 2012-02-04
        • 1970-01-01
        • 2011-06-13
        • 2023-03-21
        • 1970-01-01
        • 2015-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多