PHP变量名、变量值、类型

PHP变量名、变量值、类型,第1张

变量名 =》 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 之内的变量或者方法

比如:

<php

 class 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;

通过类的属性不行吗?

比如:

<php

class 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 下一个变量 这是什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9607335.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存