① php怎麼命名比較規范
1、類
類名每一個單詞首字母大寫,如類名StudentCourse。
2、常量
常量名所有字母大寫,單詞間用下劃線分隔,如常量名NULL、TRUE、FALSE、ROOT_PATH等。
3、變數
為了保證代碼的具有良好的可讀性,一般要求在同一個軟體系統中,變數的命名原則必須統一。
如變數的命名可以為第一個單詞首字母小寫,其餘單詞首字母大寫(駝峰);
還可以採用單詞所有字母小寫,單詞之間用下劃線分割。
4、數組
數組是一個可以存儲多個數據元素的容器,因此在為數組命名是,盡量使用單詞的復數形式。
5、函數
函數的命名規范和變數名的命名規范相同。通常函數都是執行一個動作的,因此函數命名時,一般函數中會包含動詞。
6、資料庫表欄位
資料庫表欄位的命名規范和變革兩名的命名規范相同。
7、類文件
PHP類文件命名時通常以.class.php為後綴,文件名和類名相同。
② PHP大小寫問題:函數名和類名不區分,變數名區分
PHP對大小寫敏感問題的處理比較亂,寫代碼時可能偶爾出問題,所以這里總結一下。
但我不是鼓勵大家去用這些規則。推薦大家始終堅持「大小寫敏感」,遵循統一的代碼規范。
1.
變數名區分大小寫
復制代碼
代碼如下:
<?php
$abc
=
'abcd';
echo
$abc;
//輸出
'abcd'
echo
$aBc;
//無輸出
echo
$ABC;
//無輸出
2.
常量名默認區分大小寫,通常都寫為大寫
(但沒找到能改變這個默認的配置項,求解)
復制代碼
代碼如下:
<?php
define("ABC","Hello
World");
echo
ABC;
//輸出
Hello
World
echo
abc;
//輸出
abc
3.
php.ini配置項指令區分大小寫
如
file_uploads
=
1
不能寫成
File_uploads
=
1
4.
函數名、方法名、類名不區分大小寫
但推薦使用與定義時相同的名字
復制代碼
代碼如下:
<?php
function
show(){
echo
"Hello
World";
}
show();
//輸出
Hello
World
推薦寫法
SHOW();
//輸出
Hello
World
復制代碼
代碼如下:
<?php
class
cls{
static
function
func(){
echo
"hello
world";
}
}
Cls::FunC();
//輸出hello
world
5.
魔術常量不區分大小寫,推薦大寫
包括:__LINE__、__FILE__、__DIR__、__FUNCTION__、__CLASS__、__METHOD__、__NAMESPACE__。
復制代碼
代碼如下:
<?php
echo
__line__;
//輸出
2
echo
__LINE__;
//輸出
3
6.
NULL、TRUE、FALSE不區分大小寫
復制代碼
代碼如下:
<?php
$a
=
null;
$b
=
NULL;
$c
=
true;
$d
=
TRUE;
$e
=
false;
$f
=
FALSE;
var_mp($a
==
$b);
//輸出
boolean
true
var_mp($c
==
$d);
//輸出
boolean
true
var_mp($e
==
$f);
//輸出
boolean
true
PHP變數名區分大小寫,函數名不區分大小寫,經常被新手忽視的小細節,測試如下.
PHP變數名區分大小寫測試:
復制代碼
代碼如下:
<?php
$aaa
=
"jb51.net";
$AAA
=
"JB51.CN";
echo
$aaa.'-'.$AAA;
//jb51.net-JB51.CN
?>
PHP函數名不區分大小寫測試:
復制代碼
代碼如下:
<?php
function
bbb(){
echo
'abc';
}
function
BBB(){
echo
"Abc";
}
?>
上面這段代碼會報錯:(
!
)
Fatal
error:
Cannot
redeclare
BBB()
③ php類方法中參數問題,參數怎麼是一個類名 加上變數,怎麼理解
PHP5可以使用類型約束。函數的參數可以指定只能為對象(在函數原型裡面指定類的名字),PHP5.1之後也可以指定只能為數組。
註:PHP7之後可以指定int,string等。
代表方法baz()接收的亂喚參數是一個對象,並且指定必須是Test類實例化的對遲陪蔽象。
比如在後面加如下代碼就能正常輸出:string(5)"hello"
12345
$a=newTest(111);$a->baz($a);
但是如果換成如下代碼碼州:
classB{}
$b=newB();
$a=newTest(111);
$a->baz($b);
就會報錯:Catchablefatalerror:Argument1passedtoTest::baz()mustbeaninstanceofTest,instanceofBgiven
簡單意思就是:傳遞參數必須是實例化Test,你傳B的對象是不對的。
④ PHP變數名、變數值、類型
變數名 =》 zval
變數值 =》zend_value
問題:
引用計數
變數傳遞,變數賦值
變數的基礎結構
變數值:zend_value
typedef union _zend_value {
zend_long lval; /* long value */
double dval; /* double value */
zend_refcounted *counted;
zend_string *str;
zend_array *arr;
zend_object *obj;
zend_resource *res;
zend_reference *ref;
zend_ast_ref *ast;
zval *zv;
void *ptr;
zend_class_entry *ce;
zend_function *func;
struct {
uint32_t w1;
uint32_t w2;
} ww;
} zend_value;
變數名:_zval
typedef struct _zval_struct zval;
struct _zval_struct {
zend_value value; /* value */
union {
struct {
ZEND_ENDIAN_LOHI_4(
zend_uchar type, /* active type */
zend_uchar type_flags,
zend_uchar const_flags,
zend_uchar reserved) /* call info for EX(This) */
} v;
uint32_t type_info;
} u1;
union {
uint32_t var_flags;
uint32_t next; /* hash collision chain */
uint32_t cache_slot; /* literal cache slot */
uint32_t lineno; /* line number (for ast nodes) */
uint32_t num_args; /* arguments number for EX(This) */
uint32_t fe_pos; /* foreach position */
uint32_t fe_iter_idx; /* foreach iterator index */
} u2;
};
變數類型【type】
/* regular data types */
#define IS_UNDEF 0
#define IS_NULL 1
#define IS_FALSE 2
#define IS_TRUE 3
#define IS_LONG 4
#define IS_DOUBLE 5
#define IS_STRING 6
#define IS_ARRAY 7
#define IS_OBJECT 8
#define IS_RESOURCE 9
#define IS_REFERENCE 10
/* constant expressions */
#define IS_CONSTANT 11
#define IS_CONSTANT_AST 12
/* fake types */
#define _IS_BOOL 13
#define IS_CALLABLE 14
/* internal types */
#define IS_INDIRECT 15
#define IS_PTR 17
true 和 flase 沒有zend_value 結構, 直接通過type來區分,zend_long和double的變數指直接存儲在_zend_value中,不需要額外的value指針。
⑤ php function括弧里(類名 變數名)這種寫法是什麼意思
php本來是弱類型語言,經過這幾年的發展,php也支持了類型判斷,比如可以聲明一個函數變數為
function test(int $a):int{}
對於類名,變數名這種寫法,是php5中引入的,這樣目的就是對參數進行限定,可以提前判斷出不符合類型的變數傳入。
依賴注入是一種設計模式,而它依賴的就是這個功能,通過注入不同的類來實現不同的功能。