控制 PHP 类的实例化次数!

 更新时间:2016年11月25日 16:07  点击:1642

控制 php 类的实例化次数!为了保证服务器资源的有效利用,而且一个类比方说模板啊,数据库什么的,在一个页面内只需要实例化一次!也就是在内存中只运行一个实例!那么为了避免重复实例化,那么控制 php 类的实例化次数,是很有必要的!方法其实很简单:就是给类一个外部接口,私有化(private)构造函数,抛弃可以在类外部使用new实例化该类的方法!以下,就是我给出的一个例子,相信大家一看就明白了!( PHP5 以上版本! )

<?php
class test{
   const name = ''test'';
   public static $havenew = false;
   public $name = ''我被限制为只能实例化一次了!'';
   private function __construct(){
  
   }
   function __destruct(){
    self::$havenew = false;
   }
   public function inter(){
    if(self::$havenew){
     echo ''类 ''.self::name.'' 已被实例化!'';
     return NULL;
    }else{
     self::$havenew = true;
     return new self;
    }
   }
}
$class1 = test::inter();
var_dump($class1);
echo ''<br />'';
$class2 = test::inter();
var_dump($class2);
?>

这里都是实例通过test里inter()这个方法实例化对象的!因为构造本身不可以直接访问,所以也不存在可以使用new 来实例化!




1.什么是引用?引用的优缺点,还有关于函数返回引用的问题.

2.有一道php的题是让我完成一个类的接口,我不明白什么是接口,希望高手指点.

3.遇到了一些关于类的问题, public static的用途什么的,希望大家给个相关教程看看.

4.下面着段代码
<?php
// 注意在 4.0.0-RC2 之前不存在 !== 运算符

if ($handle = opendir(''/path/to/files'')) {
    echo "Directory handle: $handlen";
    echo "Files:n";

    /* 这是正确地遍历目录方法 */
    while (false !== ($file = readdir($handle))) {
        echo "$filen";
    }

    closedir($handle);
}
?>


为什么false !==这里用!==而不用!=  ?


5.今天让我完成的那个类文件最后没有?>,   这样有什么意义么?

 

我的回复如下:

做为资深面试官解答如下:
1.通常在大型程序中,对引用的深入理解与处理影响到相关代码的执行效率问题,不正确处理引用会使程序效率低 35%以上,如关联程序过多,会更慢.那么什么是引用呢?要明白引用首先你得先明白什么是变量?$name="jiania",这里的$name就是变量,如果$username=&$name,那么我们就说变量$username与变量$name指向同一个对象,就是jiania,也就是说他们指向同一个地方.在function或是OO中,又有点需要注意的
举例:
环境:php5.1.6起
$powman=new jiania();
注意new jiania()前面并没有&,如果加了会出现错误,因为在高版本中,这里的引用交给Zend 引擎来处理,它对这个进行了限制.

b.如果在一个函数内部给一个声明为 global 的变量赋于一个引用,该引用只在函数内部可见。可以通过使用 $GLOBALS 数组避免这一点。
c.复杂数组最好拷贝而不是引用。
d.$this ,在一个对象的方法中,$this 永远是调用它的对象的引用。
2.其实楼主面试不知是什么层次的程序员,php有关接口在现实中很少程序员真正使用到。当然现在玩框架的人例外.我本身是一名JAVA程序员,从05开发PHP框架起,在接口上有一些理解。现讲解一下。
如果你要明白接口,首先你得明白什么叫对象,那什么是对象呢?万物皆对象,把所有的东西当成对象,比如我的名字叫洪建家,我孩子的名字叫小家家,这里的名字就是对象,洪建家与小家家都是人,这就是类,OK,明白了什么是类与对象,接下来我跟你讲讲什么是抽像类,现实中我们常会描述一些对象,但却没有具体的实现方法,这样的类就是抽象类,比如
abstract class CallMe{
        abstract function showMe();
              
}
class Callson extends CallMe {
    function showMe{
        print "Callson::showMe()n";
    }
}
这里的CallMe就是抽像类,抽像类只能通过子类来具体实现。OK,明白了什么叫抽像类,我们下面再来讲解什么是接口。
对于初学者,你可以理解接口(interface)是抽象类的变体。可能会有一些刚接触OO的人会问,那为何还需要区别什么是接口,什么是抽像类,答接口是用于实现多重继承。以下是一个接口的简单演示,注意实现任何接口必需用implements关键字

<


<?php
// Yahoo Web Services PHP Example Code
// Rasmus Lerdorf
// www.111cn.net

$appid = ''YahooDemo'';
// 在这输入你申请的ID号

$service = array(''image''=>''http://api.search.yahoo.com/ImageSearchService/V1/imageSearch'',
                 ''local''=>''http://api.local.yahoo.com/LocalSearchService/V1/localSearch'',
                 ''news''=>''http://api.search.yahoo.com/NewsSearchService/V1/newsSearch'',
                 ''video''=>''http://api.search.yahoo.com/VideoSearchService/V1/videoSearch'',
                 ''web''=>''http://api.search.yahoo.com/WebSearchService/V1/webSearch'');
?>
<html>
<head><title>PHP Yahoo Web Service Example Code</title></head>
<body>
<form action="YahooSearchExample.php" method="GET">
Search Term: <input type="text" name="query" /><br />
Zip Code: <input type="text" name="zip" /> (for local search)<br />
<input type="submit" value=" Go! " />
<select name="type">
<?php foreach($service as $name => $val) {
    if(!empty($_REQUEST[''type'']) && $name == $_REQUEST[''type''])
      echo "<option SELECTED>$name</option>n";
    else echo "<option>$name</option>n";
} ?>
</select>
</form>
<?php
function done() {?>
</body></html>
<?php
exit;
}

if(empty($_REQUEST[''query'']) || !in_array($_REQUEST[''type''],array_keys($service))) done();

// Ok, here we go, we have the query and the type of search is valid
// First build the query
$q = ' 今天终于将PHP配置好了,以前也配置过,可以用但是总会有一点毛病什么的,现在完全的解决了。请注意是开发环境不是运行环境!开发环境和运行环境有很大区别的,不能说谁更严格,只能说两者的要求不同,开发环境注重开发效率,怎么方便怎么来,安全性一般,而运行环境注重安全性,注重运行效率,怎么快怎么来,怎么安全怎么来。
下面介绍下方法:Apache+php+mysql+EMS SQL manager+Zend Studio
这样做的目的只有一个:尽量的提高效率,减少简单重复的事情发生。
总体上如果不看Zend studio那么剩下的就是一个完整的PHP运行环境,为了方便我们在zend studio中最好将PHP文件或者你的站点保存到你的apache的htdocs目录下
然后按照Apache+php+mysql在windows下的安装与配置图解(最新版) 配置PHP的基本环境
这个是个Zend Studio的截图,相信看很明白,主要说的是右侧的output区域,这个区域可以看出来你的PHP页的运行效果,基本和在WEB服务器运行一样,如果运行后没有错,这个区域就会正常显示,然后看代码区的上面一点,点Browser,然后看到有点象浏览器,没错就是浏览器,假设你已经配置好了Apache+PHP+mysql+EMS Sql Manager,然后输入localhost/test.php,这样是不是很方便?
最后注意一点,安装apache时,如果有IIS的话,可能你的80端口已经被占用,使用8080端口好了,如果没有IIS,也没有其他WEB服务器,但是就是显示错误,那么很可能是迅雷占用了你的80端口,这个软件使用的频率应该说比IIS要多很多,一定注意,实在发现不了是什么软件可以用一些查看端口占用情况的软件,百度里很多的。 

新功能:
 1、AMF3支持:包含了RemoteObject,你可以尽情用在Flex2上。
 2、JSON(Javascrīpt Object Notation,轻量级的数据交换格式)支持:附加到gateway.php,现在json.php将使你更好的在Flash中使用自己的JSON服务。这里有两个例子:MochiKit 和 Spry。XML-RPC 同样被支持。
 3、一个新的浏览器。值得一提的是例程MochiTest同样是可以使用在JSON模式的例程。所以你可以自己证实它的确可以同时运行在AMP和JSON模式下。
 4、$this->methodTable的最后。 从现在开始是可以被忽略的。所有的Methods都可以间接的使用默认值。

安装Amfphp 1.9 beta 2

目前amfphp1.9的最新版是amfphp1.9 beta2,可以到 http://www.5etdemi.com/uploads/amfphp-1.9.beta.20070126.zip下载。将其解压缩到硬盘,拷贝到apache的web目录下。键入http://localhost:8080/amfphp/gateway.php,会出现amfphp网关的一个说明文件。AMFPHP基本的安装已经完成。

四、安装AMF扩展

最新版的AMFPHP加入了一个AMF扩展:它是用C写了一个AMF协议的解码和编码器,执行效率大大提升。尤其是大的数据源的时候,用php编码可能会超时而不能完成的操作,用AMF扩展就可以完成。 安装比较简易:

1. 下载

到http://www.teslacore.it/projects/amfext/amfext-0.8.7a-bin.zip下载,将php_amf.dll解压缩到PHP根路径下ext中。

2. 配置

打开php.ini,加上下面这一行:extension=php_amf.dll

我们不需要对AMFPHP 本身做任何修改或者配置。系统会自动监测那个扩展是否存在,存在就会自动应用,否则就会使用PHP的解码和编码。

好了,将其web共享,别名为flashservices。支持Amfphp的Web应用就配置好了。我们只需要将写好远程服务类放到Amfphp根目录services中就可以在Flash和Flex中访问了。

五、本地化设置

因为PHP默认的编码语言是ISO-8859-1,要使前面配置的Web应用支持简体中文,最好的方法是打开Amfphp根路径下的gateway.php,将 $gateway->setCharsetHandler("utf8_decode", "ISO-8859-1", "ISO-8859-1");修改为$gateway->setCharsetHandler("iconv", "GBK", "GBK");即可。要解决MySQL中的中文乱码问题,请用mysql_query("set names ''gbk''");

 

[!--infotagslink--]

相关文章

  • 快速理解MySQL中主键与外键的实例教程

    主键与外键的关系,通俗点儿讲,我现在有一个论坛,有两张表,一张是主贴 thread,一张是回帖 reply先说说主键,主键是表里面唯一识别记录的字段,一般是帖子id,体现在访问的时候,例如是 thread.php&#63;id=1 表示我要访问的是帖子...2015-11-24
  • c# 接口使用实例

    这篇文章主要介绍了c#接口使用的实例,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-17
  • yii添删改查实例

    一、数据访问对象 (DAO)YiiDAO 基于 PHP Data Objects (PDO) 构建。它是一个为众多流行的DBMS提供统一数据访问的扩展,这些 DBMS 包括MySQL, PostgreSQL 等等。因此,要使用 Yii DAO,PDO 扩展和特定的 PDO 数据库驱动(例如...2015-11-24
  • JS中判断字符串中出现次数最多的字符及出现的次数的简单实例

    下面小编就为大家带来一篇JS中判断字符串中出现次数最多的字符及出现的次数的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-06-12
  • C#中的IEnumerable简介及简单实现实例

    这篇文章主要介绍了C#中的IEnumerable简介及简单实现实例,本文讲解了IEnumerable一些知识并给出了一个简单的实现,需要的朋友可以参考下...2020-06-25
  • Postgresql 动态统计某一列的某一值出现的次数实例

    这篇文章主要介绍了Postgresql 动态统计某一列的某一值出现的次数实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-26
  • Servlet实现统计页面访问次数功能

    这篇文章主要介绍了Servlet实现统计页面访问次数功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-04-08
  • JS+JSP通过img标签调用实现静态页面访问次数统计的方法

    这篇文章主要介绍了JS+JSP通过img标签调用实现静态页面访问次数统计的方法,基于JavaScript动态调用jsp页面通过对TXT文本文件的读写实现统计访问次数的功能,需要的朋友可以参考下...2015-12-16
  • php socket讲解与实例

    在这一章里你将了解到迷人而又让人容易糊涂的套接字(Sockets)。Sockets在PHP中是没有充分利用的功能。今天你将看到产生一个能使用客户端连接的服务器,并在客户端使用sock...2016-11-25
  • C++内核对象封装单实例启动程序的类

    这篇文章主要介绍了利用C++内核对象封装的类,程序只能运行单个实例,可防止多次启动,大家参考使用吧...2020-04-25
  • php 中缓冲输出实例代码

    ob_start([string output_callback])- 打开输出缓冲区   所有的输出信息不在直接发送到浏览器,而是保存在输出缓冲区里面,可选得回调函数用于处理输出结果信息。 ob...2016-11-25
  • PHP类的声明与实例化及构造方法与析构方法详解

    这篇文章主要介绍了PHP类的声明与实例化及构造方法与析构方法,结合实例形式分析了PHP面向对象类的声明与使用相关技巧,需要的朋友可以参考下...2016-01-28
  • Vue实例简单方法介绍

    这篇文章主要为大家详细介绍了Vue实例的一些简单方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2017-01-23
  • C# 委托(跨窗体操作控件)实例流程讲解

    今天研究了一下,在C#里面却是可以不用自定义消息这么复杂的方法来实现跨窗体调用控件,C#有更好的办法就是委托。...2020-06-25
  • PHP支持断点续传实例代码

    下面我们来介绍一下关于php实现断点续传的代码,有需要学习的朋友可参考一下。 让PHP下载代码支持断点续传 主要靠的 HTTP协议中header Content-Range来实现 先来...2016-11-25
  • asp.net 计算字符串中各个字符串出现的次数

    比如一个字符串"a,b,a,c,b,b,d",现在我们要统计每个字符串出现次数。解决这个问题,我们可以使用泛型集合 Dictionary(TKey,TValue)。它有一个key值用来存储字符串和一个value值,用来存储字符串出现的次数...2021-09-22
  • 同时ping多个ip找了最快的ip网的php实例

    本文我们来分享一段可以同时ping多个ip然后对比找出网络最快的ip的php程序,这段程序用来找代理ip可是神器。 为了翻墙方便 ,买了个vpn,转到osx下面官方没有提供合...2016-11-25
  • vue实例的选项总结

    这篇文章主要介绍了Vue实例的选项有哪些,文中讲解非常细致,代码帮助大家更好的学习,感兴趣的朋友可以了解下...2020-06-10
  • 举例说明JavaScript中的实例对象与原型对象

    这篇文章主要介绍了JavaScript中的实例对象与原型对象,针对constructor属性和prototype属性展开来讲,需要的朋友可以参考下...2016-03-12
  • PHP中获取星期几实例程序

    在php中我们要获取今天是星期几可以直接使用date函数来操作,下面我来给各位同学总结一下具体的操作方法,希望此方法对各位朋友有帮助。 PHP中获取星期方法大全简单...2016-11-25