变量名 =》 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 foo() {$param = 'Hello';
}
变量$param是在函数内声明的,当你未调用函数foo时,变量$param尚未存在,而foo函数执行结束后$param变量的生命周期结束,也随之被销毁,所以对于外部代码来说,$param总是不可见的。
class 是php的类
$user 是这个类中的属性
function是类中的对象
$this是指向当前的类对象
如果你不加$this
那么,你调用的只能是function 之内的变量或者方法
比如:
<phpclass a{
private $b = 10;
function d() {
$b = 50;
echo $b; //输出50
echo $this -> b; //输出10
}
}
你追问的代码有语法错误,
这句:$curl
=
curl_init();
不能通过调用函数的方式为成员变量赋值!!
楼主全局变量不能在class内部定义,但是可以在类内部使用。
如果要访问类内部的变量,可以把成员变量设置成public
<php
//
定义一个全局变量
$global_var
=
1;
class
A
{
//
定义一个public型成员变量
public
static
$public_class_var
=
2;
public
function
print_global()
{
//
使用全局变量
global
$global_var;
echo
$global_var;
}
}
//
测试
$a
=
new
A();
$a->print_global();
echo
A::$public_class_var;
通过类的属性不行吗?
比如:
<phpclass demo{
public $var1 = null;
public function func1(){
$this->var1 = 'from func1';
}
public function func2(){
echo $this->var1;
}
}
$demo = new demo();
$demo->func1();
$demo->func2();
类中的数组变量定义跟正常的定义一样
例如:
<php
class my_class {
public $array = array('a','b');
function my_function(){
return $this->$array;
}
}
$new_class = new my_class;
print_r($new_class->my_function);
>
以上就是关于PHP变量名、变量值、类型全部的内容,包括:PHP变量名、变量值、类型、php怎么访问类的方法中的变量!!、php class 下一个变量 这是什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)