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中的getter和setter不能看到我的私有声明变量?(他们都在同一个班)_Php_Oop_Getter Setter - Fatal编程技术网

为什么PHP中的getter和setter不能看到我的私有声明变量?(他们都在同一个班)

为什么PHP中的getter和setter不能看到我的私有声明变量?(他们都在同一个班),php,oop,getter-setter,Php,Oop,Getter Setter,我正在为学校做的一个研究项目搜集密码学家的资料。我有一个非常简单的类,它指向一个网页,输入该网页的每个href链接,并将它们写入一个文件 当我运行代码时,实际上并没有得到一个特定的错误,但现在它只写了一个空白文件。我的问题似乎是我的getter和setter不知道我的私有实例变量,而且,我的对象$obj似乎不知道我的getter和setter,所以我有点困惑 我用的是JetBrains PHPStorm。谢谢大家的帮助和支持 编辑:我已经更新了下面的代码,它可以正常运行。对于任何对使用它感兴趣的

我正在为学校做的一个研究项目搜集密码学家的资料。我有一个非常简单的类,它指向一个网页,输入该网页的每个href链接,并将它们写入一个文件

当我运行代码时,实际上并没有得到一个特定的错误,但现在它只写了一个空白文件。我的问题似乎是我的getter和setter不知道我的私有实例变量,而且,我的对象$obj似乎不知道我的getter和setter,所以我有点困惑

我用的是JetBrains PHPStorm。谢谢大家的帮助和支持

编辑:我已经更新了下面的代码,它可以正常运行。对于任何对使用它感兴趣的人来说,这段代码将从网页上删除所有链接,并将每个链接的内容存储在一个文件中。我可能最终会修改它,去掉所有html,这样我只会得到原始文本,然后对输出进行JSON编码,这样就可以轻松地对其进行解析

<?php
class Scraper
{

    /*
    =============================================
    SET UP THE BASE DIRECTORY FOR SCRAPING,
    AND OPEN FILES TO WRITE INFORMATION TO
    ==============================================
    */

    private $basedir; //BASE DIRECTORY PATH FOR SCRAPING
    private $outfile; //NAME OF FILE TO WRITE TO

    /*
    =============================================
    SETTER FOR BASE DIRECTORY
    ==============================================
    */

    public function setBaseDirectory($base)
    {
        $this->basedir = $base;
    }

    /*
    =============================================
    SETTER FOR OUTFILE
    ==============================================
    */

    public function setOutfile($file)
    {
        $this->outfile = $file;
    }

    /*
    =============================================
    GETTER FOR OUTFILE
    ==============================================
    */

    public function getOutfile()
    {
        return $this->outfile;
    }

    /*
    =============================================
    GETTER FOR BASE DIRECTORY
    ==============================================
    */

    public function getBaseDirectory()
    {
        return $this->basedir;
    }


    /*
    =============================================
    THIS FUNCTION TAKES THE HYPERLINKS OUT OF
    A WEB PAGE AND RETURNS THEM IN AN ARRAY.
    ITS SCOPE IS PRIVATE SINCE IT IS A HELPER
    METHOD FOR GETDIRCONTENTS
    =============================================
    */
    private function grabLinks($contents)
    {

        $last_dir = array();
        $URLs = array();

        preg_match_all("|href=[\"'](.*?)[\"']|", $contents, $match);

        foreach ($match as $key => $value)
            foreach ($value as $key2 => $TheUrl)
                $URLs[] = $TheUrl;

        for ($i =0; $i < (count($URLs)/2);$i++)
        {
            $item = str_replace('href=','',(string)$URLs[$i]);
            $item = str_replace('"','',$item);
            array_push($last_dir, $item);
        }

        return $last_dir;
    }


    /*
    =============================================
    THE GOAL OF THIS FUNCTION IS TO GET THE
    CONTENTS OF EACH FORUM POST AND WRITE THEM
    INTO A FILE. MAY EXPLORE CREATING AN
    ASSOCIATIVE ARRAY AND JSON_ENCODING THEM
    BASED ON NAME = POST NAME VALUE = FILE CONTENTS
    =============================================
    */
    public function getDirContents($dir)
    {

        $contents = file_get_contents($dir);
        $linksArray = $this->grabLinks($contents);
        for ($i = 0; $i < count($linksArray);$i++)
        {
            $contents = strip_tags(file_get_contents($dir.$linksArray[$i])); //GET CONTENTS OF FILE FROM LINK
            fwrite($this->getOutfile(), $contents);
            $debug = fopen("debugLog.txt", "w");
            fwrite($debug, "debug contents: \n\n".$this->getOutfile().$this->getBaseDirectory()." $contents \n\n");
        }
    }
}

/*
=============================================
CREATE NEW INSTANCE OF CLASS AND CALL FUNCTION
TO GET CONTENTS OF DIRECTORY ITEMS
==============================================
*/
$obj = new Scraper();
$obj->setBaseDirectory("http://satoshi.nakamotoinstitute.org/posts/");
$obj->setOutfile(fopen("Satoshi_Forum_Posts.txt", "w"));
$obj->getDirContents($obj->getBaseDirectory());
echo $obj->getBaseDirectory();
echo $obj->getOutfile();

好的,我已经找到了问题的根源,我很抱歉浪费了那些好心在上面发表评论的人的时间。事实证明,我的PHP代码很好,在我做了1次更改后运行

我刚开始使用JetBrains PHPStorm IDE,并从桌面而不是JetBrains的工作区将该类文件加载到编辑器中。一旦我整合了Bulk和Jonathan Kuhn提到的一些小的语法变化,我就在设置程序时定义的工作区内的JetBrains中创建了一个新项目,所有的警告信息都消失了,我仍然不完全理解它们为什么消失了


我运行了我的代码并产生了期望的结果。我将发布问题中的更新代码以及评论中建议的更新,以便任何需要类似脚本的人都可以使用它。再次感谢所有愿意帮忙的人

php的确切错误是什么?不太清楚您的错误是什么,但我注意到了:fwrite$debug,debug contents:\n\n.$this->getOutfile.$this->getBaseDirectory$内容\n\n;您缺少getBaseDirectory调用的。此外,如果getBaseDirectory需要一个基于定义的参数,即使没有使用该参数,您也在调用getBaseDirectory,而没有传入参数。它在我的机器上工作,但是您得到了大量的404,因为此行$contents=file_get_contents$dir.$linksArray[$i];尝试获取URL,如http://satoshi.nakamotoinstitute.org/posts/http://nakamotoinstitute.org/mempool/You 可能没有收到致命错误,但脚本会生成许多通知和警告。如果只是strip_contents error函数不存在,则您的环境中可能没有打开错误报告。尝试重新引入错误,但有错误报告-1;位于页面顶部,仅适用于非实时环境。然后再试一次-你应该会看到一个错误。嘿,哈弗,谢谢你的输入。实际上,我错把它放进去了,大约在我发布代码5分钟后才意识到。我有带标签的更新帖子。好的,谢谢你的帮助!好的,没问题。此外,如果这一切现在都起作用,最好不要覆盖问题中的代码,因为这将不再显示原始问题,对新读者来说也没有什么意义。即使在您解决了问题之后,最好在回答中显示问题所在,即重新发布代码,以便问题和答案仍然有意义。我怀疑这个问题无论如何都无法回答,因为还不清楚解决方法是什么——所以在这种情况下,这并不重要。但总的来说值得一提。好的,谢谢以后我一定会这么做。关闭这个线程可能是安全的,因为这个问题是我的IDE的一些奇怪的问题,我还没有弄清楚。