当前位置:  编程技术>php
本页文章导读:
    ▪php设计模式之单例模式学习      如何解决这个问题,建立唯一的数据库连接是必要的方式。 又如何知道与这个数据库的连接是否已经建立? 还是需要现在建立? 单例模式可以解决这个问题。 先假设我们需要一个类完成在.........
    ▪php读取sphinx的例子      php读取sphinx的例子,有需要的朋友可以参考下。 1.未采用mysql二进制网络协议的代码:   代码如下: <?php //检查sphinx是否能连接,不能重试两次,能则连接,不用mysql协议,仅供参考 function ch.........
    ▪简单安装php-fpm      简单安装php-fpm,仅供参考。 1:下载最新版本的php:http://www.php.org 2:解压安装 tar -jxvf php-5.3.5.tar.bz2 cd php-5.3.5 ./configure --prefix=/usr/local/php-fpm --enable-fpm --enable-mbstring=all --enable-sockets --enable-ftp --.........

[1]php设计模式之单例模式学习
    来源: 互联网  发布时间: 2013-12-24

如何解决这个问题,建立唯一的数据库连接是必要的方式。

又如何知道与这个数据库的连接是否已经建立? 还是需要现在建立?

单例模式可以解决这个问题。

先假设我们需要一个类完成在内存中只有一份的功能,我们该如何做呢?

我们一步一步的使用前面学过的知识来写一个单例的例子。

前面学过,每次用 new 类名 的方式,就可以创建一个对象。我们必须禁止外部程序用 new 类名的方式来创建多个实例。

解决办法:将构造函数设置成 private ,让构造函数只能在内部被调用,而外部不能调用。这样,这个类就不能被外部用 new 的方式建立多个实例了。

以下是不能被外部用new实例化的类。
 

代码如下:
<?
class A{
    private function __construct(){}  
}
$a = new A();
?>

程序运行结果为:
Fatal error: Call to private A::__construct() from invalid context in E:\PHPProjects\test.php on line 6

我们已经禁止外部用new实例化这个类,我们改如何让用户访问这个类呢?前门堵了,我们需要给用户留个后门。
解决办法是:static 修饰的方法,可以不经实例化一个类就可以直接访问这个方法。
//不能用new实例化的类.<br>
//static的方法留给外部访问.<br>
//在方法内部返回实例.<br><br>
 

代码如下:
<?
class A{
    private function __construct(){}
    static function getClassA(){
        $a = new A();
        return $a;
    }      
}
// 看到这里确实返回的是 A 的实例.但不是同一个对象.
$a1 = A::getClassA();
$a2 = A::getClassA();
echo "\$a1 的类是 ".get_class($a1)." , \$a2 是 ".get_class($a1);
if($a1 === $a2){
   echo "<br> \$a1 \$a2 指向同一对象.";
}else{
   echo "<br> \$a1 \$a2 不是一个对象.";
}
?>

 程序运行结果为:
$a1 的类是 A , $a2 是 A
$a1 $a2 不是一个对象.

我们已经通过static方法返回了A的实例。但还有问题。我们如何保证我们多次操作获得的是同一个实例的呢?

解决办法:
static的属性在内部也只有一个。
static 属性能有效的被静态方法调用。将这个属性也设置成private,以防止外部调用。
先将这个属性设置成 null。每次返回对象前,先判断这个属性是否为 null 。
如果为 null 就创建这个类的新实例,并赋值给这个 static 属性。如果不为空,就返回这个指向实例的 static 属性。
//不能用new实例化的类.<br>
//static的方法留给外部访问.<br>
//在方法内部返回实例.<br>
//定义静态属性保证这个实例能被静态方法调用.<br>
//增加判断部分.<br><br>
 

代码如下:
<?
class A{
    private static $a = null;
    private function __construct(){}
    static function getClassA(){
        if( null == self::$a){
            self::$a = new A();
        }     
        return self::$a;
    }      
}
// 看到这里确实返回的是 A 的实例.但不是同一个对象.
$a1 = A::getClassA();
$a2 = A::getClassA();
echo "\$a1 的类是 ".get_class($a1)." , \$a2 是 ".get_class($a1);
if($a1 === $a2){
   echo "<br> \$a1 \$a2 指向同一对象.";
}else{
   echo "<br> \$a1 \$a2 不是一个对象.";
}
?>

程序运行结果为:
$a1 的类是 A , $a2 是 A
$a1 $a2 指向同一对象.

到此,我们写了一个最简单的单例模式 。
现在,你可以尝试写一个应用单例设计模式的数据库连接类。
要记住单例模式的使用效果和书写方式。

您可能感兴趣的文章:
php单例模式为何只能实例化一次
php设计模式之单例模式的实例代码
php常用设计模式之工厂模式与单例模式介绍
学习php设计模式之单例模式
php实现的单例模式的例子
学习php单例模式及应用实例
php单例模式的演示代码
有关php单例模式介绍及例子
php单例模式的例子


    
[2]php读取sphinx的例子
    来源: 互联网  发布时间: 2013-12-24

php读取sphinx的例子,有需要的朋友可以参考下。

1.未采用mysql二进制网络协议的代码:
 

代码如下:
<?php
//检查sphinx是否能连接,不能重试两次,能则连接,不用mysql协议,仅供参考
function checkSphinxNoMysql() {
    $flag = true;
    $retries = 0;
    while ( $flag && $retries < 2 ) {
        $s = new SphinxClient ();
        $s->setServer ( $_ENV ['db_host'], $_ENV ['current_sphinx_port'] );
        if (! $s->open ()) {
            //此处为如果连接不上就更改配置文件,根据项目需要来写
            //global $configDefault;
            //updateConfig ( $configDefault );
            $retries ++;
        } else {
              $flag = false;
            break;
        }
    }
    return $s;
    if ($retries >= 2) {
        //sendemail or not
        return false;
    }
}
  
$order_column = 'id DESC,time DESC';//排序规则
//$s = checkSphinx ();
$s = new SphinxClient ();
$s->setServer ( 'sphinx_host', 'sphinx_port');
//以上两句代码亦可使用$s = checkSphinx ();来代替
$indexname = "page_keyword";//索引名字
$s->setMatchMode ( SPH_MATCH_PHRASE );
$s->SetSortMode ( SPH_SORT_EXTENDED, $order_column );
$s->setMaxQueryTime ( 100000 );
$s->setLimits ( 0, $limit_total, $limit_total );
$keyword_sphinx = iconv ( "gbk", "utf-8", $keyword );
$result = $s->query ( $keyword_sphinx, $indexname );
$s->close ();
if ($result ['total'] > 0) {
    var_dump($result ['matches']);
    //根据打印出的结果进行相应的读取
}
?>

2.采用mysql二进制网络协议的代码:
 

代码如下:
<?php
//检查sphinx是否能连接,不能重试两次,能则连接,用mysql14协议
protected function checkSphinx() {
    $flag = true;
    $retries = 0;
    while ( $flag && $retries < 2 ) {
        $conn = mysql_connect() ( "{$_ENV ['db_host']}:{$_ENV ['current_sphinx_port']}" );
        if (! $conn) {
            //此处为如果连接不上就更改配置文件,根据项目需要来写
            //global $configDefault;
            //updateConfig ( $configDefault );
            $retries ++;
        } else {
            $flag = false;
            break;
        }
    }
    if ($retries >= 2) {
        die ( "Please contact with administrator." );
    }
    return $conn;
}
  
$order_column = 'id DESC,time DESC';//排序规则
$conn = mysql_connect ( "sphinx_host:sphinx_port" );
//以上代码亦可使用$conn = checkSphinx ();来代替
if (! $conn) {
    return - 1;//连接不上返回状态
}
$keyword_sphinx = iconv ( "gbk", "utf-8", $keyword );
//keyword为索引名字
$sql = "select * from keyword where match('{$keyword_sphinx}') order by {$order_column} limit {$limit_total} option max_matches={$limit_total}";
$result = @mysql_query() ( $sql, $conn );
  
$i = 0;
while ( ($row = mysql_fetch_array ( $result )) !== false ) {
    var_dump($row);
    //根据打印出的结果进行相应的读取
}
$totals = $this->getTotalFound ($conn);//获取总记录个数
?>

如何获取总记录个数参考:sphinxql如何得到结果数?show meta的详细说明?


    
[3]简单安装php-fpm
    来源: 互联网  发布时间: 2013-12-24

简单安装php-fpm,仅供参考。

1:下载最新版本的php:http://www.php.org

2:解压安装
tar -jxvf php-5.3.5.tar.bz2

cd php-5.3.5

./configure --prefix=/usr/local/php-fpm --enable-fpm --enable-mbstring=all --enable-sockets
--enable-ftp --enable-pcntl  --with-mysql=mysqlnd--with-pdo-mysql=mysqlnd
--with-mcrypt --with-freetype-dir --with-jpeg-dir --with-png-dir
--with-gd --enable-gd-native-ttf  --with-curl --with-zlib

make && make install

3:修改配置
 

代码如下:
cp php.ini-production /usr/local/php-fpm/lib/php.ini
cd /usr/local/php-fpm/etc/
cp php-fpm.conf.default php-fpm.conf

安装完成。

您可能感兴趣的文章:
nginx中php-fpm调优方法
centos 5.6中安装nginx+mysql+php(php-fpm)
nginx+php-fpm页面显示空白的解决方法
有关nginx+php-fpm配置文件的组织结构
nginx php(php-fpm)上传大文件的设置
在nginx中查看php-fpm工作状态


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
mysql iis7站长之家
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3