亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

__set() 和 __get() 不能與 isset() 和empty() 一起使用。怎么解決?

__set() 和 __get() 不能與 isset() 和empty() 一起使用。怎么解決?

PHP
阿晨1998 2023-09-08 17:20:00
具有:class foo {        private $myproperty;        public    function __construct() {        if (            ( !isset( $_SESSION ) ) &&            ( session_status() == PHP_SESSION_NONE )        ) {            session_start();        }        public    function __set( $name, $value ) {        if ( property_exists( "foo", $name ) ) {            $_SESSION[ $name ] = $value;        }    }        public    function __get( $name ) {        if ( property_exists( "foo", $name ) ) {            return $_SESSION[ $name ];        }    }    }正在做:$foo = new $foo();$foo->myproperty = "value";if ( isset ($foo->myproperty ) ) {  echo "myproperty setted";} else {  echo "myproperty not setted"}為什么要返回"myproperty not setted"?如果我替換為同樣的isset問題 empty。是一個錯誤嗎?如果沒有,我該如何修復它?
查看完整描述

2 回答

?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

您應該使用 __isset() 方法。這是一個例子:


<?php

class Foo {

    private $myproperty;


    public function __construct() {

        if (

            ( !isset( $_SESSION ) ) &&

            ( session_status() == PHP_SESSION_NONE )

        ) {

            session_start();

        }

    }


    public function __set( $name, $value ) {

        if ( property_exists( "foo", $name ) ) {

            $_SESSION[ $name ] = $value;

        }

    }


    public function __get( $name ) {

        if ( property_exists( "foo", $name ) ) {

            return $_SESSION[ $name ];

        }

    }

    

    public function __isset($propertyName){

        return isset($_SESSION[$propertyName]);

    }

}

        



$foo = new foo();

$foo->myproperty = "value";


if ( isset($foo->myproperty) ) {

  echo "myproperty setted";

} else {

  echo "myproperty not setted";

}

?>

請注意,這種方式empty()也可以工作,因為它在內部使用__isset()。


查看完整回答
反對 回復 2023-09-08
?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

isset當您在類級別上已經有了神奇的__GET方法并且您已經在實現相同的功能時,您實際上不需要檢查。代碼中的第二個拼寫錯誤是類名不是,new $foo();而應該是new foo().?但是,我建議類名使用標題大小寫,例如class Foo.

class Foo {


private $myproperty;



public function __construct() {

? ? if (

? ? ? ? ( !isset( $_SESSION ) ) &&

? ? ? ? ( session_status() == PHP_SESSION_NONE )

? ? ) {

? ? ? ? session_start();

? ? }

}



public function __set( $name, $value ) {

? ? if ( property_exists( "foo", $name ) ) {

? ? ? ? $_SESSION[ $name ] = $value;

? ? }

}





? public function __get( $name ) {

? ? ? ? if ( property_exists( "foo", $name ) ) {

? ? ? ? ? ? return $_SESSION[ $name ];

? ? ? ? }

? ? }

? ?

}


$foo = new Foo();

$foo->myproperty = "value";

if ( $foo->myproperty? ) {

? echo "myproperty setted";

} else {

? echo "myproperty not setted";

}

不過,如果您仍在尋找如何使用isset,您可以將以下方法添加到您的class


public function __isset($name)

{

? ? return isset($_SESSION[$name]);

}


查看完整回答
反對 回復 2023-09-08
  • 2 回答
  • 0 關注
  • 131 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號