search
HomeBackend DevelopmentPHP Tutorial我在听XX视频课程,遇到__set()魔术方法,不能使用的问题

<code> class study{
     private  $name;
     private  $age;
     function say(){
     echo "我的名字是:".$this->name.",我的年龄是:".$this->age ;
     }
      function __set($k,$v){
              echo "1111";
 }
 }
$lisi=new study();
$lisi->age=100;</code>

我按老师视频里书写的,视频里老师的zend没有报错,而我的报错了,说age是私有属性....,难道因为视频是11年的所以,如今变化很大?还是需要什么设置?我发现我按老师说的很多魔术方法都会使用时报错,很苦恼~求助!!

回复内容:

<code> class study{
     private  $name;
     private  $age;
     function say(){
     echo "我的名字是:".$this->name.",我的年龄是:".$this->age ;
     }
      function __set($k,$v){
              echo "1111";
 }
 }
$lisi=new study();
$lisi->age=100;</code>

我按老师视频里书写的,视频里老师的zend没有报错,而我的报错了,说age是私有属性....,难道因为视频是11年的所以,如今变化很大?还是需要什么设置?我发现我按老师说的很多魔术方法都会使用时报错,很苦恼~求助!!

楼主的调用没有错啊。

假设有一个类,类中有一个私有变量$name

<code><?php class People{                                                                                   
           private $name;
           public function __set($key = '', $value = ''){
                   echo "here";
           }       
  }       
  $obj = new People();
  $obj->name = '文艺青年阿虚V';</code>

按照常理面向对象是不允许你这样调用的

<code>$obj->name = '文艺青年阿虚V';
</code>

PHP中__set的功能就是让你可以这么做,具体的流程是这样的,当PHP解析器看到你正在使用对象调用一个私有变量,这时它本想着报错呢,可是又发现你的类中有一个__set()方法,于是它就不报错,而自动执行__set()方法了


上面的__set()方法其实很简陋,只echo "here";了,既然它在上面所说的这种情况下自动调用,那我就可以在这种情况下完善一下__set()方法,让它去做你想干的事。

根据你的say()方法,我猜是你的__set方法内缺了一行
$this->$k = $v;
如果仍然有问题,确认你的php版本,__set方法是php5中有的,你不会找了一个很古老的4.x的版本吧?

然后作为属性重载方法,必须把方法的访问控制声明为public,如果你的视频教程没有提到这点,那么是一个非常不严谨的教程,我建议你赶紧换。见: http://php.net/manual/zh/language.oop5.overloading.php 当然了,由于php为了向下兼容,所以即使你不写public的访问控制,它默认也会声明称public,然而这是一个不可依赖的特性,你不知道未来PHP是否还会兼容这种写法

?太彻了 private是私有属性 只能在类里面调用

你写的没错啊,就是因为age是私有属性才会有__set()__get()

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace("&nbsp;","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么判断有没有小数点php怎么判断有没有小数点Apr 20, 2022 pm 08:12 PM

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

Hot Tools

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 English version

SublimeText3 English version

Recommended: Win version, supports code prompts!