Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Cookie签入OOP_Php_Oop - Fatal编程技术网

Php Cookie签入OOP

Php Cookie签入OOP,php,oop,Php,Oop,直到昨天,我还在焦头烂额地试图从程序思维转变为面向对象思维;今天早上我放弃了。我对自己说,我可能还没有准备好去理解它 然后我开始以通常的方式编码,编写一个函数来检查是否有“记录”的cookie 因为我遇到了一个问题:我想返回两个变量($logged和$cookieValue),而不是一个。我搜索了一下,发现Jasper从OOP的角度解释了一个方法(或者这就是我所看到的)。 这个答案让我对OOP有了一个新的认识,因此我试图通过这种方式重写我试图实现的目标: class chkCookie { pu

直到昨天,我还在焦头烂额地试图从程序思维转变为面向对象思维;今天早上我放弃了。我对自己说,我可能还没有准备好去理解它

然后我开始以通常的方式编码,编写一个函数来检查是否有“记录”的cookie

因为我遇到了一个问题:我想返回两个变量(
$logged
$cookieValue
),而不是一个。我搜索了一下,发现Jasper从OOP的角度解释了一个方法(或者这就是我所看到的)。 这个答案让我对OOP有了一个新的认识,因此我试图通过这种方式重写我试图实现的目标:

class chkCookie {
public $logged;
public $cookieValue;

public function __construct($logged, $cookieValue) {
    $this->logged = $logged;
    $this->cookieValue = $cookieValue;
}

function chkCookieLogin() {
    $out = new chkCookie();
    if(isset($_COOKIE["logged"])) {
        $out->logged = 'true';
        $out->cookieValue = $_COOKIE["logged"];

        return $out;
    }
    else {
        $out->logged = 'false';

        return $out;
    }
}
}

$vars = chkCookieLogin();
$logged = $vars->logged;
$cookieValue = $vars->cookieValue;
echo $logged; echo $cookieValue;
很明显,第一次尝试时它不起作用……第二次和第三次也不起作用。但这是我第一次感觉到我已经迈出了“真正触动”OOP的一步(或者这就是我所想的!)

我的问题是:

  • 从OOP的角度来看,这个尝试写得正确吗
  • 如果是,问题是什么?(因为我想不止一个)
  • 非常感谢你

    返回数组数据类型的想法归功于


    使用,可以设置如下对象:

    class Factory {
        private $Data = [];
        public function set($index, $data) {
            $this->Data[$index] = $data;
        }
    
        public function get($index) {
            return $this->Data[$index];
        }
    }
    
    然后,要使用DI模块,可以设置如下方法(使用):

    使用错误检查,我们可以在需要时调用该方法:

    $cookieArr = is_callable($f->get('Check-Cookie')) ? call_user_func($f->get('Check-Cookie')) : [];
    echo $cookieArr[0] ? $cookieArr[1] : 'Logged is not set';
    

    <>我也会考虑将常数添加到DI类中,允许使用更动态的方法,而不是每次进行错误检查。例如,在
    set()
    中包含一个常量,如
    Factory::FUNC_ARRAY
    ,这样您的
    get()
    方法可以返回已经执行的闭包

    如果您感到困惑,可以研究使用

    看看它在哪里工作

    如果这有什么意义的话,

    那是一种可怕的做法。。。回到过程,注意您可以
    返回数组(“logged”=>logged$logged,“cookieValue”=>cookieValue)我认为codereview上的朋友们可以在这一点上帮助你更好,@Niet the Dark Absol End但除了饼干检查的具体案例,我是否接近OOP思维?”因为对我来说,尝试从一种方法切换到另一种方法时,会有同样的感觉,就像蒙着眼睛在黑暗的房间里行走一样:我没有把握@费德肯:谢谢你的提示!我甚至不知道它的存在!好吧,等我长大了,我想和你一样。它是如此的不同,而且比我现在编写的(糟糕的)风格更复杂,以至于我感觉自己像个婴儿!我会逐字研究你的剧本,深入其中,因为它很吸引人哈,很高兴我能帮上忙@我不知道为什么这是个好答案。
    Factory
    类在这里只是一个数组。仅仅因为某个地方有“类”这个词并不意味着这不是一个过程代码。不要破坏他的氛围;)这是一个如果更适合@Federkun
    $f = new Factory();
    $f->set('Cookies', $_SESSION);
    $f->set('Check-Cookie', function() use ($f) {
        return $f->get('Cookies')['logged'] ? [true, $f->get('Cookies')['logged']] : [false, null];
    });
    
    $cookieArr = is_callable($f->get('Check-Cookie')) ? call_user_func($f->get('Check-Cookie')) : [];
    echo $cookieArr[0] ? $cookieArr[1] : 'Logged is not set';