+ -
当前位置:首页 → 问答吧 → php static variable

php static variable

时间:2013-10-26

来源:互联网

汪汪想问....static function access static variable的....php是用self..???

不过依然出现Notice: Use of undefined constant
在DB::Connect的所有DB static variable
复制内容到剪贴板代码:class DB
{
private $handle;
private $type;
private $transaction_count;
private $statements;

const KEY_TYPE = 'KEY_TYPE';

const TYPE_STRING = 'TYPE_STRING'; //string
const TYPE_BINARY = 'TYPE_BINARY'; //binary or big object
const TYPE_INTEGER = 'TYPE_INTEGER'; //integer
const TYPE_FLOAT = 'TYPE_FLOAT'; //float
const TYPE_TIMESTAMP = 'TYPE_TIMESTAMP'; //date & time(default now)

static $TYPE_ID = array(

TYPE_STRING => 1,
TYPE_BINARY => 2,
TYPE_INTEGER => 3,
TYPE_FLOAT => 4,
TYPE_TIMESTAMP => 5,

);

const CONSTRAINT_PRIMARY = 'CONSTRAINT_PRIMARY'; //true or false(default)
const CONSTRAINT_AUTO_INCREMENT = 'CONSTRAINT_AUTO_INCREMENT'; //true or false(default)
const CONSTRAINT_NOT_NULL = 'CONSTRAINT_NOT_NULL'; //true or false(default)
const CONSTRAINT_UNIQUE = 'CONSTRAINT_UNIQUE'; //true or false(default)
const CONSTRAINT_DEFAULT = 'CONSTRAINT_DEFAULT'; //default value
const CONSTRAINT_FOREIGN = 'CONSTRAINT_FOREIGN'; //target key

private static $SQL_STATEMENT_EXTRACT = array(

'sqlite' => array(

DB::TYPE_STRING => 'TEXT',
DB::TYPE_BINARY => 'BLOB',
DB::TYPE_INTEGER => 'INTEGER',
DB::TYPE_FLOAT => 'REAL',
DB::TYPE_TIMESTAMP => 'INTEGER',

DB::CONSTRAINT_PRIMARY => 'PRIMARY KEY',
DB::CONSTRAINT_AUTO_INCREMENT => 'AUTOINCREMENT',
DB::CONSTRAINT_NOT_NULL => 'NOT NULL',
DB::CONSTRAINT_UNIQUE => 'UNIQUE',
DB::CONSTRAINT_DEFAULT => 'DEFAULT',
DB::CONSTRAINT_FOREIGN => 'REFERENCES',

),

);

private function __construct($dbh, $dbt)
{
array_key_exists($dbt, DB:SQL_STATEMENT_EXTRACT) or die('don\'t support.');
$this->handle = $dbh;
$this->type = $dbt;
$this->transaction_count = 0;
$this->statements = DB:SQL_STATEMENT_EXTRACT[$dbt];
}

static function Connect($db_type = '', $db_host = '', $db_name = '', $db_user = '', $db_password = '')
{
switch($db_type)
{
case '':
$dsn = "sqlite::memory:";
break;
case 'sqlite':
$dsn = "sqlitedb_host";
break;
default:
$dsn = "$db_type:host=$db_host;dbname=$db_name";
break;
}
if($db_type == '')
{
$db_type = 'sqlite';
}
$_SQL_STATEMENT = self:SQL_STATEMENT_EXTRACT[$db_type];
$KEY_NODE = array(
'table_name ' . $_SQL_STATEMENT[self::TYPE_STRING] . ' ' . $_SQL_STATEMENT[self::CONSTRAINT_NOT_NULL],
'column_name ' . $_SQL_STATEMENT[self::TYPE_STRING] . ' ' . $_SQL_STATEMENT[self::CONSTRAINT_NOT_NULL],
'column_type ' . $_SQL_STATEMENT[self::TYPE_INTEGER] . ' ' . $_SQL_STATEMENT[self::CONSTRAINT_NOT_NULL],
);
try
{
$dbh = new PDO($dsn, $db_user, $db_password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->query('CREATE TABLE IF NOT EXISTS db_index(' . implode(', ', $KEY_NODE) . ')');
} catch(PDOException $e)
{
var_dump($e->getMessage());
}
return new DB($dbh, $db_type);
}

作者: Susan﹏汪汪   发布时间: 2013-10-26

作者: 泉水   发布时间: 2013-10-26

引用:原帖由 泉水 於 2013-8-11 12:21 AM 发表
?checked?
http://php.net/manual/en/language.oop5.static.php
这个看过了....汪汪就是看这页...所以才知道用self... (((对php不太熟..

作者: Susan﹏汪汪   发布时间: 2013-10-26

function Connect 有改善空间

作者: DarkHero8   发布时间: 2013-10-26

引用:原帖由 DarkHero8 於 2013-8-11 10:00 AM 发表
function Connect 有改善空间
汪汪会慢慢改好的

作者: Susan﹏汪汪   发布时间: 2013-10-26

问题确认在return果行...orz
复制内容到剪贴板代码:class DB
{
private $handle;
private $transaction_count;
private $SQL_STATEMENT;

const KEY_TYPE = 'KEY_TYPE';

const TYPE_STRING = 'TYPE_STRING'; //string
const TYPE_BINARY = 'TYPE_BINARY'; //binary or big object
const TYPE_INTEGER = 'TYPE_INTEGER'; //integer
const TYPE_FLOAT = 'TYPE_FLOAT'; //float
const TYPE_TIMESTAMP = 'TYPE_TIMESTAMP'; //date & time(default now)

static $TYPE_ID = array(

TYPE_STRING => 1,
TYPE_BINARY => 2,
TYPE_INTEGER => 3,
TYPE_FLOAT => 4,
TYPE_TIMESTAMP => 5,

);

const CONSTRAINT_PRIMARY = 'CONSTRAINT_PRIMARY'; //true or false(default)
const CONSTRAINT_AUTO_INCREMENT = 'CONSTRAINT_AUTO_INCREMENT'; //true or false(default)
const CONSTRAINT_NOT_NULL = 'CONSTRAINT_NOT_NULL'; //true or false(default)
const CONSTRAINT_UNIQUE = 'CONSTRAINT_UNIQUE'; //true or false(default)
const CONSTRAINT_DEFAULT = 'CONSTRAINT_DEFAULT'; //default value
const CONSTRAINT_FOREIGN = 'CONSTRAINT_FOREIGN'; //target key

private function __construct($dbh, $SQL_STATEMENT)
{
$this->handle = $dbh;
$this->transaction_count = 0;
$this->SQL_STATEMENT = $SQL_STATEMENT;
}

static function Connect($db_type = '', $db_host = '', $db_name = '', $db_user = '', $db_password = '')
{
$SQL_STATEMENT = array(

'sqlite' => array(

self::TYPE_STRING => 'TEXT',
self::TYPE_BINARY => 'BLOB',
self::TYPE_INTEGER => 'INTEGER',
self::TYPE_FLOAT => 'REAL',
self::TYPE_TIMESTAMP => 'INTEGER',

self::CONSTRAINT_PRIMARY => 'PRIMARY KEY',
self::CONSTRAINT_AUTO_INCREMENT => 'AUTOINCREMENT',
self::CONSTRAINT_NOT_NULL => 'NOT NULL',
self::CONSTRAINT_UNIQUE => 'UNIQUE',
self::CONSTRAINT_DEFAULT => 'DEFAULT',
self::CONSTRAINT_FOREIGN => 'REFERENCES',

),

);
array_key_exists($db_type, $SQL_STATEMENT) or die('don\'t support.');
$SQL_STATEMENT = $SQL_STATEMENT[$db_type];

switch($db_type)
{
case '':
$dsn = "sqlite::memory:";
break;
case 'sqlite':
$dsn = "sqlite:$db_host";
break;
default:
$dsn = "$db_type:host=$db_host;dbname=$db_name";
break;
}
if($db_type == '')
{
$db_type = 'sqlite';
}

$KEY_NODE = array(
sprintf('table_name %s %s', $SQL_STATEMENT[self::TYPE_STRING], $SQL_STATEMENT[self::CONSTRAINT_NOT_NULL]),
sprintf('column_name %s %s', $SQL_STATEMENT[self::TYPE_STRING], $SQL_STATEMENT[self::CONSTRAINT_NOT_NULL]),
sprintf('column_type %s %s', $SQL_STATEMENT[self::TYPE_INTEGER], $SQL_STATEMENT[self::CONSTRAINT_NOT_NULL]),
);
try
{
$dbh = new PDO($dsn, $db_user, $db_password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->query('CREATE TABLE IF NOT EXISTS db_index(' . implode(', ', $KEY_NODE) . ')');
} catch(PDOException $e)
{
var_dump($e->getMessage());
}

return new self($dbh, $SQL_STATEMENT);
}

作者: Susan﹏汪汪   发布时间: 2013-10-26

问题解决了...在$TYPE_ID

汪汪果然经验不足

作者: Susan﹏汪汪   发布时间: 2013-10-26

热门下载

更多