php私有属性
⑴ php弹出“undefined property:stdclass” ,怎么解决
这种情况一般是你对一个类对象,使用了属性调用造成的。
比如应该是
echo$a->att1;
你写错成了:
echo$a['att1'];
改回来就可以了。
PHP中使用关键字 class 来定义一个类。类的命名一般使用首字符大写,而后每个单词首字符大写连接的方式方便阅读。
在PHP5中,属性指在class 中声明的变量。在声明变量时,必须使用 public private protected 之一进行修饰,定义变量的访问权限。PHP中的属性:用来描述对象的数据元素称为对象的属性(也称为数据/状态)
Public(公开): 可以自由的在类的内部外部读取、修改。
Private(私有): 只能在这个当前类的内部读取、修改。
Protected(受保护):能够在这个类和类的子类中读取和修改。属性的使用:通过引用变量的 -> 符号调用变量指向对象的属性。
在方法内部通过 $this-> 符号调用同一对象的属性。
所以应该用箭头调用而不是括号。
⑵ 在PHP里,子类是不是可以继承父类的私有属性,但不能访问啊
用print_r来检测一下这个对象
注释掉的时候
print_r($s1);
Student Object
(
[name:Person:private] => ys
)
告诉我们name是Person类私有的属性
当没注释掉的时候
print_r($s1);
Student Object
(
[name:Person:private] => ys
[name] => 子类
)
告诉我们name是Person类私有的属性,有给Student类添加了一个name属性
我们还注释掉,再修改如下
$s1 = new Student();
$s1->name = '子类'; //添加一个属性为name
$s1->say();
跟上面一样的结果
从这些调试结果分析,继承跟访问可以这样说是一个概念,私有不可以继承过来。
你继承的时候加的那个$this->name是又新添加了一个name属性,跟父类的name属性无关
⑶ php中Get方法跟Post方法的区别
php中Get方法跟Post方法的区别
php——get方法 :
这个方法用来获取私有成员属性值的,有一个参数,参数传入你要获取的成员属性的名称,返回获取的属性值,这个方法不用手工的去调用,因为也可以把这个方法做成私有的方法,是在直接获取私有属性的时候对象自动调用的。
因为私有属性已经被封装上了,是不能直接获取值的,但是如果你在类里面加上了这个方法,在使用“echo$p1->name”这样的语句直接获取值的时候就会自动调用__get($name)方法,将属性name传给参数$name,通过这个方法的内部执行,返回传入的.私有属性的值。
如果成员属性不封装成私有的,对象本身就不会去自动调用这个方法。
php——post方法 :
这个方法用于传送数据,用法与get方法类似,但有区别。
区别 :
Get方法在超链接后边紧跟要传递的参数对于用户是可见的如:%D6%A3%D6%DD%B4%F3%D1%A7&fr=index&ie=utf-8
而Post方法传递的参数是不可见的。
GET是从服务器上获取数据;POST是向服务器传送数据。
在客户端,GET通过URL提交数据,数据在URL中可见;POST把数据放在form的数据体内提交。
GET提交的数据最多只有1024字节;POST提交的数据量无限制。
由于使用GET时,参数会显示在地址栏上,而POST不会,所以,如果这些数据是非敏感数据,那么使用GET;如果包含敏感数据,为了安全,用POST方法。
;⑷ php,子类无法访问父类私有属性,子类实例化再赋值后,子类所添加的新成员属性不存在
我把涉及到这个问题的知识点,可以和大家分享一下:
1.父类humanBeing , 子类student , 实例对象 $m (注意:$m是子类student 的实例,和humanBeijing没有直接关系)
2.private 的属性.仅在本类里使用;任何子类、实例对象都无法访问,更别说赋值。这个在书本上都一直是这么说滴。。哈哈。。。
根据以上知识点,来看你这个问题:
$student1=new student;
/*实例一个student的对象,此时注意,这个对象并不会继承父类humanBeing的三个 private变量$name,$age,$gender*/
$student1->name='zhangsan';
$student1->age=20;
$student1->gender='male';
/*这里需要注意.很多人会误以为是给父类humanBeing的三个属性赋值了,这是错的。这里的赋值,仅仅是给子类student的三个属性赋值,这里也许会有人问,子类student那有什么属性呀?在php中,所有的变量,不要求申明,在类中属性也是一样的,不要求申明,而且类中,默认都是public。所以上面的这三行代码,仅仅是子类student的三个属性赋值,和父类humanBeing的三个属性,没有任何关系,仅仅名字一样而已*/
function say(){
echo "My name is {$this->name} and I am {$this->age} years old. I am {$this->gender}.<br />";
}
/*这个是父类humanBeing的公有方法,(默认的是public的),这个方法中 $this -> name.这里的$this 是指父类student,$this -> name是指父类student的属性,从始至终,它并没有被赋值,所以它是空的,(而且它也不能被赋值,因为是private),这里的$student1->name='zhangsan';赋值操作,仅仅是修改子类student的$name */
我想这么回答,你应该非常清楚了吧
再来理解后面的例子,就很容易了。
$m->name="zhangsan";
/*仅仅是给子类Man的属性赋值,而且因为可以省略声明,默认又是public的,所以能直接赋值,当然也可以输出了*/
class Person{
private $name;
}
/*可以直接把private $name;去掉,因为后面的赋值,跟它没有任何关系,直接修改成*/
class Person{
}
⑸ PHP中常用的11个魔术方法
在PHP中,常用的11个魔术方法及其功能概述如下:
__get 和 __set
- __get:用于获取未声明的属性。
- __set:用于设置未声明的属性。
- 这两个方法特别适用于处理私有或受保护属性的访问。
__isset 和 __unset
- __isset:用于检查未定义的属性是否存在。
- __unset:用于删除未定义的属性。
- 这两个方法也处理私有或受保护属性的访问控制。
__call
- 当尝试调用未声明的方法时,此方法会被调用。
- 对于实现方法重载或执行自定义行为非常有用。
__autoload
- 自动加载类的功能。
- 当尝试使用尚未定义的类时,此方法会被调用,允许在类未被直接加载前加载它们。
__construct 和 __destruct
- __construct:构造方法,在实例创建时执行,用于初始化对象。
- __destruct:析构方法,在对象销毁时执行,用于释放资源。
__clone
- 在对象复制时,此方法被自动调用。
- 使用clone语句复制对象时,用于执行任何额外的初始化操作。
__toString
- 当尝试将对象转换为字符串时,此方法会被调用。
- 确保对象可以被正确显示。
__sleep 和 __wakeup
- __sleep:在对象序列化前执行,用于清理不需要存储的对象状态。
- __wakeup:在反序列化后执行,用于重建任何被序列化时丢失的资源。
__set_state
- 当调用var_export函数时,此方法被调用。
- 用于反序列化对象状态。
__invoke
- 当尝试以函数调用方式调用对象时,此方法被自动调用。
- 实现对象作为函数的使用。
__callStatic
- 与__call方法类似,但用于处理静态方法的调用。
- 确保静态方法的正确执行。
这些魔术方法极大地增强了PHP类的灵活性和功能,允许开发者以更简洁的方式实现复杂的功能。在使用时,应确保所有魔术方法都被定义为公共的,以确保它们的正确执行。
⑹ php类属性的赋值问题
cache_factory::$cache_factory 是 类 cache_factory 的一个单例 , 该语句的意思是给 这个单例实例的cache_config属性赋初值,我这么说能听懂吗?!
享笑网为您解答。可以来我们这里看看,有不清楚的,我再给你解释。
⑺ 在php中如何设置类的属性,如何调用类的方法
PHP访问类的属性、方法使用箭头语法(->)。这里我给你一个例子供你参考:
<?php
classMyClass{//定义MyClass类
public$name;//定义了一个公有属性
protected$_age;//定义了一个保护属性
private$_email;//定义了一个私有属性
publicfunctionmy_method(){//定义my_method方法
}
protectedfunction_my_method2(){//定义_my_method2方法
}
}
$obj=newMyClass;//实例化
$obj->name='noname';//设置name属性
$obj->_age=12;//这是错误的,不能设置保护属性
$obj->address='KingStreet.'//设置一个未声明的属性是允许的,效果和公有属性类似,但未赋值前不能使用。
$obj->my_method()//调用公有方法
$obj->_my_method2();//这是错误的,不能调用保护方法
你需要理解继承、公有、保护和私有的概念。
继承:子类继承父类的公有、保护属性和方法。
公有:类的实例可以访问的属性和方法。
保护:只能在类的内部及其子类内部访问的属性和方法。
私有:只能在类的内部访问的属性和方法。
这是个很基础的问题,建议你多看书。
⑻ php菜鸟提问~面向对象里的对私有字段成员的赋值取值操作时采用拦截器……
现在,老师只是给你看了个简单的例子
实际用途中,是很有用的,比如你需要传入大量的变量 或者 你需要赋值的变量需要进行安全判断或者类型判断等。 下面是一个简单的例子,希望可以帮到你
classcla{
private$a=array();
publicfunction__set($key,$value){
$this->a[$key]=$value;
}
publicfunction__get($key){
return$this->a[$key];
}
}
$cla=newcla();
$cla->b1='b1';
$cla->b2='b2';
echo$cla->b1;
echo'<br>';
echo$cla->b2;
这个代码 在很多接口调用中,经常用到