(EDITED QUES)PHP - 在另一个函数中调用函数

时间:2012-02-24 11:19:52

标签: php oop function get

我已经提到了类似这样的类似问题,并且完全按照应有的方式完成,但没有成功。因此,如果有人可以帮助我,我将不胜感激

我有一个名为view.php的文件,它根据switch case条件调用类中的函数。此功能显示页面上的输出,链接很少。当点击链接时,它会调用另一个函数,该函数位于我的第一个函数中。但显然当我点击我的链接时,没有任何反应。那是我的代码。

view.php

require_once(..'/functions.php');
$functions = new myfile_functions();
<form method="post" action="view.php"><div>
<p><select name="potentialareas" id="potentialareas">
<option style="font-weight:bold;" value="-1">Select an area to view </option>
<?php 
foreach($accessareas as $accessarea){
    echo "<option value='".$accessarea->id."'>".$accessarea->name. " - " . $accessarea->reporttype.   "</option>"; 
}
?>
</select>
</p>
<p><input name="view" id="view" type="submit" value="View" title="view" /><br /></p>
</div></form>
<div style="border-top:1px dotted #ccc;"></div>
   <?php

if(isset($_POST['view']))
{
    $hierarchyid = $_POST['potentialareas'];
    $reporttype = $DB->get_record_sql("some query");
     switch($reporttype->reporttype)
     {
        case "D Report":
        $functions->getDepartmentReport($hierarchyid);
        break;
        case "S Report":
        $functions->getSectionReport($hierarchyid);
        break;
        case "A Report":
        $functions->getAreaReport($hierarchyid);
        break;
    }   
}

的functions.php

class myfile_functions(){

function getDepartmentReport($departmentid)
{
global $USER, $CFG, $DB;

$dname = $DB->get_record_sql("some query");
$output = "<div id='actualreport'><p><b>" . $dname->name. " Department Report</b></p>";
$output .= "<p>Activities started: </p>";
$output .= "<p>Activities Completed: </p></div>";
$output .= "<div id='separator' style='border-top:1px dotted #ccc;'></div>";
$output .= "<div id='listofsections'><p><b><i>Select the following for a more detailed report.</i></b></p>";
$snames = $DB->get_records_sql('some query');
foreach($snames as $sname)
{$output .= "<p>" .$sname->name. "&nbsp;&nbsp;&nbsp;&nbsp;<a href='view.php?section=" .$sname->id. "' name='section'><i>view report</i></a></p>";
}
$output .= "</div>";
if(isset($_GET['section']))
{
       $this->getSectionReport($_GET['section']);
}
echo $output;
 }

 function getSectionReport($sectionid)
 {
global $USER, $CFG, $DB;
$sname = $DB->get_record_sql("some query");
$output = "<div id='actualreport'><p><b>" . $sname->name. " Report</b></p>";
$output .= "<p>Num Users: </p>";
$output .= "<p>Activities Completed: </p></div>";
$output .= "<div id='separator' style='border-top:1px dotted #ccc;'></div>";
$output .= "<div id='listofareas'><p><b><i>Select the following for a more detailed report.</i></b></p>";
$anames = $DB->get_records_sql('some query');
foreach($anames as $aname)
{$output .= "<p>" .$aname->name. "&nbsp;&nbsp;&nbsp;&nbsp;<a href='view.php?area=" .$aname->id. "' name='view' id='view'><i>view report</i></a></p>";
}
$output .= "</div>";
if(isset($_GET['area']))
{
    $areaid = $_GET['area'];
    $this->getAreaReport($areaid);
}
echo $output;
 }

类似于调用上述函数的另一个函数,n等等。

 function getAreaReport($id)
 { .. same content but calling another function...}

因此,当我点击我的view report链接时,我会在我的查询字符串中获得id附加ID,例如

 http://mydomain.com/view.php?section=5

理想情况下,getSectionReport()的内容应该打印但不是。请指出我做错了什么。

提前致谢。

3 个答案:

答案 0 :(得分:2)

用于显示所有内容的主要方法是什么?目前你有三个函数,所有函数都以各种方式相互链接,但它看起来并不像你先实例化任何东西。当然,PHP会在您的URL中输入一个参数,但是如果没有实例化类并声明了一个方法,那么它如何知道您希望它做什么?

对于myfile.php,也许你应该这样做:

class MyFile
{
   public function other_function()
   {
      // Various stuff
      return 'stuff';
   }
   public function other_other_function()
   {
      // Various other stuff
      return 'other stuff';
   }
   public function page_view($file_id)
   {
      $var = $this->other_function($file_id);
      return $this->other_other_function($var);
   }
}

$class = new MyFile;
echo $class->page_view($_GET['id']);

答案 1 :(得分:0)

如果这两个函数是一个类的一部分(如上面提示的注释),则调用应写为

$this->getUserReport($id);

答案 2 :(得分:0)

如果您正在访问同一课程中的兄弟功能,请使用:

class ClassName
{
    public function sibling_function()
    { 
       return 'Hey bro!';
    }
    public function my_function()
    {    
       return $this->sibling_function();
    }
}

如果没有,请使用标准:

public function my_function()
{ 
    return sibling_function();
}

如果您仍然遇到问题,请确保您的课程已正确实例化。如果您甚至不首先实例化该课程,那就没有必要再调用另一个函数了:

$obj = new ClassName;
echo $obj->my_function();