① 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中引入的,这样目的就是对参数进行限定,可以提前判断出不符合类型的变量传入。
依赖注入是一种设计模式,而它依赖的就是这个功能,通过注入不同的类来实现不同的功能。