php实例化多个类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php实例化多个类相关的知识,希望对你有一定的参考价值。
$db = new user($serverName,$uid,$pwd,$database,$CharacterSet);
mssql.class.php
user.class.php
node.class.php (这个类本来在user.class.php中,可是user.class.php
太长了)
.....
我一直很困惑,把所有的方法都写到一个类中,实例化后调用没有问题,但是那样类太长,我想把一个大类拆分成多个小类,但是实例化又出现问题,想问问各位达人此类问题应该怎样处理。
比如说:现在有user.class.php
mysql.class.php
现在用户类有注册、登录等一系列的操作(要使用数据库类)
我们直接在user.class.php 中把数据库类给实力化了
这样就了可以达到你的那个效果了;
千万不要在将所有的方法放在一个类中,这样是不好做法,住好是一个类只对于他本身的方法;这样做的目的是让逻辑更加清晰,和降低服务器的资源消耗。追问
我有个地方不清楚,就是我要拆分成很多类,每个类都要实例化(数据库类),那我在
user.class.php中要怎样实现,例如下面的代码,我要在哪里实例化数据库类?
直接引入文件
采用new或是构造方法,就可以
include_once ("common/mssql.class.php");
include_once ("configs/mssql.php");
include_once ("common/user.class.php");
include_once ("common/node.class.php");
$db = new user($serverName,$uid,$pwd,$database,$CharacterSet);
我是想这么做,但是遇到了一个问题,那就是必须要new这个类才能使用,user类和node类都继承了mssql类,不知道实例化这儿要怎么处理。
如果是我,我会用function __autoload()这个方法去处理,建议你去了解下 __autoload()这个魔术方法,自动加载类然后自动实例化。PHP手册对这个方法有详细介绍,你仔细看完就能弄明白了,如果还不明白我写个例子给你看吧
追问好的,我先试试
参考技术B 你拆开之后有问题,估计是因为之前的类内部方法之间互有调用,你得先看懂这个类中方法的一些关系,再做开分!追问拆分的两个类都继承了mssql类(DB类),你说的类在哪里?
参考技术C 如果能处理成一个类就用一个类呗,长点有什么关系,调用不出问题就行了,为什么要拆分啊追问要几千行啊!就是感觉太长了!!调用是没什么问题!
追答一个类几千行是很正常的好不好,
PHP设计模式之单例模式
定义:
单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
实现思路:
1、通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。
2、首先从强制控制对象实例化开始,创建一个无法从外部进行实例化的类,这听起来似乎很难,但其实只需要简单地将构造方法定义为 private 即可。
3、因为构造方法是私有的,所以可以用一个静态方法 $getInstance() 和一个静态属性 $instance 来间接地实例化对象。
4、$instance 属性定义为静态私有的,因此我们无法从类的外部访问它, getInstance() 方法定义为静态 public 的,所以脚本中的任何代码都可以调用它。
代码实例:
class Single { /** * 定义一个静态私有的属性存储实例化对象 */ private static $instance; /** * Single constructor. 构造方法 private,防止外部 new创建此类实例 */ private function __construct() { } /** * 定义一个静态 public方法,这是获取本类实例的唯一全局访问点 */ public static function getInstance() { // 判断是否存在已有实例,不存在则new一个新实例,确保只有一个实例 if (empty(self::$instance)) { self::$instance = new Single(); } return self::$instance; } }
以上是关于php实例化多个类的主要内容,如果未能解决你的问题,请参考以下文章