我为我的客户编写“简单”文件管理器。 注册用户可以上传文件并查看以前上传的文件,管理员可以分别操作上传。文件存储在文件系统中,但其他信息存储在MySQL中。
我已经完成了主数据库设置类(db_settings),它具有数据库用户名和密码等属性。
第二个类用于用户身份验证,此类扩展db_settings类。 该类有一个属性,即用户对象(属性:用户名,语言等)。
用户登录后,在第二个类中创建新的用户对象。
用户界面是一个页面,它通过url参数加载并包含所需的子页面。
根据当前页面将子页面与html / php-page和classfile结合使用。
当用户上传文件并点击“上传文件”时,上传页面(page_upload.php)会包含在主页面中,然后上传类会包含在同一页面中(include_once'class_upload.php')。
第二个类在class_upload.php上进行了扩展,因此可以在每个子类上访问顶级方法。
问题是当用户在子页面(即上传页面)上时未填充用户对象,因此这些属性不可用。
如何从子页面访问用户对象属性?
我想将课程保存在单独的文件中,并且不想使用自动加载器。
答案 0 :(得分:0)
听起来你需要一个像codeigniter或kohana这样的简单框架。 如果您不想这样做,请创建一种注册表,其中包含您确定需要的所有内容。然后在您使用的每个文件中包含此注册表类。自动加载器并不是那么糟糕......
答案 1 :(得分:0)
没有任何实际代码,这有点难以通过。
但是,我可以给你这个建议。扩展课程的方式是一种不好的做法。不要扩展类,因为在当前类中使用某些方法是“方便的”。
在主“bootstrap”或“index”页面上,只需包含几个类文件并实例化几个对象。
您的“UploadPage”类可以在构造函数中接收DbSettings和Auhtentication类。
希望你不要这么做,但是你可能最好先使用一个框架,看看他们是如何做的。它可能会为您提供更好的设计灵感。
“我不想使用自动加载器”的要求对我来说似乎很奇怪,但幸运的是,您可以轻松地手动包含类。
答案 2 :(得分:0)
最初的几点说明:
第二个类用于用户身份验证,此类扩展 db_settings类。该类有一个属性user对象 (属性:用户名,语言等)。
为什么这个课程会扩展db_settings
,不应该只是使用吗?
用户界面是一个页面,它通过url参数加载并包含所需的子页面。
我希望您正在验证页面参数(针对错误的输入,例如:http://my.code.com/file.txt
,../index
(递归包含自身),...)。
你可能需要根据你的需要在$_SESSION
(serialized或者__sleep()
and __wakeup()
methods或者简单地存储对象...当存储到文件时它会被序列化,所以你可能需要看看在session_start()
)。
在致电{{3}}之前不要忘记include 'class_user.php'
,这样可以正确初始化对象。