101 lines
3.4 KiB
PHP
101 lines
3.4 KiB
PHP
|
<?php
|
||
|
|
||
|
// {{{ license
|
||
|
|
||
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker: */
|
||
|
//
|
||
|
// +----------------------------------------------------------------------+
|
||
|
// | This library is free software; you can redistribute it and/or modify |
|
||
|
// | it under the terms of the GNU Lesser General Public License as |
|
||
|
// | published by the Free Software Foundation; either version 2.1 of the |
|
||
|
// | License, or (at your option) any later version. |
|
||
|
// | |
|
||
|
// | This library is distributed in the hope that it will be useful, but |
|
||
|
// | WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||
|
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
||
|
// | Lesser General Public License for more details. |
|
||
|
// | |
|
||
|
// | You should have received a copy of the GNU Lesser General Public |
|
||
|
// | License along with this library; if not, write to the Free Software |
|
||
|
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 |
|
||
|
// | USA. |
|
||
|
// +----------------------------------------------------------------------+
|
||
|
//
|
||
|
|
||
|
// }}}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Encode/decode Internationalized Domain Names.
|
||
|
* Factory class to get correct implementation either for php4 or php5.
|
||
|
*
|
||
|
* @author Markus Nix <mnix@docuverse.de>
|
||
|
* @author Matthias Sommerfeld <mso@phlylabs.de>
|
||
|
* @package Net
|
||
|
* @version $Id: IDNA.php 284681 2009-07-24 04:24:27Z clockwerx $
|
||
|
*/
|
||
|
|
||
|
class Net_IDNA
|
||
|
{
|
||
|
// {{{ factory
|
||
|
/**
|
||
|
* Attempts to return a concrete IDNA instance for either php4 or php5.
|
||
|
*
|
||
|
* @param array $params Set of paramaters
|
||
|
* @return object IDNA The newly created concrete Log instance, or an
|
||
|
* false on an error.
|
||
|
* @access public
|
||
|
*/
|
||
|
function getInstance($params = array())
|
||
|
{
|
||
|
$version = explode( '.', phpversion() );
|
||
|
$handler = ((int)$version[0] > 4) ? 'php5' : 'php4';
|
||
|
$class = 'Net_IDNA_' . $handler;
|
||
|
$classfile = 'Net/IDNA/' . $handler . '.php';
|
||
|
|
||
|
/*
|
||
|
* Attempt to include our version of the named class, but don't treat
|
||
|
* a failure as fatal. The caller may have already included their own
|
||
|
* version of the named class.
|
||
|
*/
|
||
|
@include_once $classfile;
|
||
|
|
||
|
/* If the class exists, return a new instance of it. */
|
||
|
if (class_exists($class)) {
|
||
|
return new $class($params);
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
// }}}
|
||
|
|
||
|
// {{{ singleton
|
||
|
/**
|
||
|
* Attempts to return a concrete IDNA instance for either php4 or php5,
|
||
|
* only creating a new instance if no IDNA instance with the same
|
||
|
* parameters currently exists.
|
||
|
*
|
||
|
* @param array $params Set of paramaters
|
||
|
* @return object IDNA The newly created concrete Log instance, or an
|
||
|
* false on an error.
|
||
|
* @access public
|
||
|
*/
|
||
|
function singleton($params = array())
|
||
|
{
|
||
|
static $instances;
|
||
|
if (!isset($instances)) {
|
||
|
$instances = array();
|
||
|
}
|
||
|
|
||
|
$signature = serialize($params);
|
||
|
if (!isset($instances[$signature])) {
|
||
|
$instances[$signature] = Net_IDNA::getInstance($params);
|
||
|
}
|
||
|
|
||
|
return $instances[$signature];
|
||
|
}
|
||
|
// }}}
|
||
|
}
|
||
|
|
||
|
?>
|