Светлана PHP
Guest
Где можно почитать про операцию "::"
Вот пример из кода:
Как это можно понять?
Вот пример из кода:
PHP:
$db =& db_factory :: instance();
$db =& db_factory :: instance();
$db =& db_factory :: instance();
class db_factory
{
function &instance($db_type='', $db_params='', $force_new_instance=false)
{
if(!$db_type)
$db_type = DB_TYPE;
$db_class_name = 'db_' . $db_type;
$obj =& $GLOBALS['global_db_handler'];
if (get_class($obj) != $db_class_name || $force_new_instance)
{
if(!$db_params)
{
$db_params['host'] = DB_HOST;
$db_params['login'] = DB_LOGIN;
$db_params['password'] = DB_PASSWORD;
$db_params['name'] = DB_NAME;
}
include_once(LIMB_DIR . '/core/lib/db/' . $db_class_name . '.class.php');
$obj =& new $db_class_name();
$obj->connect_db($db_params);
$obj->select_db($db_params['name']);
$GLOBALS['global_db_handler'] =& $obj;
}
return $obj;
}
...
К тому что я и пришла к выводу, что люди попросту ресурсы берегут. Вы, как далеко не новичок, возможно знаете где тут истина? Зачем? Привычка что ль?Автор оригинала: neko
спасибо, я знаю что их нет
однако обычные методы можно вызывать как статические
т.е. без создания экземпляра
$db = & new ClassName();
class Item
{
var $mQuantity;
var $mPrice;
function Item($quantity = 0, $price = 0.00)
{
$this->mQuantity = $quantity;
$this->mPrice = $price;
}
function TotalCost()
{
return $this->mPrice*$this->mQuantity;
}
}
class PriceItem extends Item
{
var $mId;
var $mExtraCharge;
function PriceItem ($id, $price=0.00, $quantity=0, $extraCharge = 0.00)
{
$this->mId = $id;
$this->mExtraCharge = $extraCharge;
$this->Item($quantity, $price);
}
function TotalCost()
{
return Item::TotalCost()+$this->mExtraCharge;
}
}
$new_price_item = &new PriceItem(777, 99.99, 3, 0.50);
echo $new_price_item->TotalCost();
Обычно такой паттерн используют, когда пишется несколько типов классов db (по одному на свою базу), а потом используя фабрику классов, инициализируют класс db, под свой тип БД (mysql, psgree,firebird и пр...)Это реализация классического паттерна проектирования ООП, который называется "Фабрика Объектов" или просто "Фабрика".