ThinkPHP遇到的类私有变量赋值问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ThinkPHP遇到的类私有变量赋值问题相关的知识,希望对你有一定的参考价值。

参考技术A Home\Common\Map.class.php文件

<?php

namespace Home\Common;

class Map

    static function getName()

        $map = array(

            '0' => '张三',

            '1' => '李四',

            '2' => '王五',

            '3' => '赵六'

        );

        return $map;

    



Home\Controller\IndexController.class.php文件

<?php

namespace Home\Controller;

use Think\Controller;

use Home\Common\Map as map;

class IndexController extends Controller

    private $sex = array(0,1);

    private $name = map::getName();  // 写法1

    // 测试 静态函数 类私有变量赋值

    public function getName()

        $name = map::getName();        // 写法2

        var_dump($name);

   



其中,写法1出错,显示:

写法2显示:

如果想私有变量赋值,可以构造函数赋值,即在__construct()里赋值:

$this->name = map::getName();    // 注意千万别写成$this->$name

类的变量成员叫做“属性”,或者叫“字段”、“特征”。属性声明是由关键字  public , protected  或者  private  开头,然后跟一个普通的变量声明来组成。 属性中的变量可以初始化,但是初始化的值必须是常数 ,这里的常数是指 PHP 脚本在编译阶段时就可以得到其值,而不依赖于运行时的信息才能求值。

在类的成员方法里面,可以用  -> (对象运算符):$this -> property(其中  property  是该属性名)这种方式来访问 非静态属性 。 静态属性 则是用   :: (双冒号):self::$property 来访问。

当一个方法在类定义内部被调用时,有一个可用的伪变量 $this。$this 是一个到主叫对象的引用(通常是该方法所从属的对象,但如果是从第二个对象 静态 调用时也可能是另一个对象)。

具体请参考:http://php.net/manual/zh/language.oop5.properties.php

如何对类中的私有成员变量进行赋值和访问

1.定义一个学生类,提供成员变量姓名和年龄,需要将成员变量私有化,提供对外公共访问的成员方法

class Student{
//私有化成员变量
private String name ;
private int age ;
//提供公共访问方法
//赋值并获取成员变量

//给姓名进行传参并赋值
public void setname(String n){
name = n ;
}

//获取姓名的方法
public String ?getname(){
return name ;
}

//给年龄传参并赋值
public void setage(int a){
age = a ;
}

//获取年龄的方法
public int getage(){
return age ;
}
}

2.主方法

成员变量被私有化了,无法通过实例化对象访问私有成员变量,外界不可访问私有成员变量

public class Test {
public static void main(String[] args) {
//创建Student类的对象
Student s = new Student() ;

//获取值
System.out.println(s.getname()+"----"+s.getage());
System.out.println("---------------------");
//给学生对象进行赋值

s.setname("张三") ;
s.setage(15) ;

System.out.println(s.getname()+"----"+s.getage());
}
}

3.代码

学生类

package project1;

public class Student {
	private String name ;
	private int age ;

	public void setname(String n){
	name = n ;
	}


	public String getname(){
	return name ;
	}


	public void setage(int a){
	age = a ;
	}


	public int getage(){
	return age ;
	}
}

测试类

package project1;

public class Dumo{
public static void main(String[] args) {

Student s = new Student();


System.out.println(s.getname()+"----"+s.getage());
System.out.println("---------------------");


s.setname("张三");
s.setage(15);

System.out.println(s.getname()+"----"+s.getage());
}
}

以上是关于ThinkPHP遇到的类私有变量赋值问题的主要内容,如果未能解决你的问题,请参考以下文章

设置为默认类型时如何测试私有/受保护的类变量

OC中私有方法和私有变量

Python 的类里面给属性重新赋值用了啥方法?

在继承的类中使用私有变量 - Java

私有作用域的初级理解

如何访问其子类中的类的私有变量?