(РЕДАКТИРОВАННЫЕ ВОПРОСЫ) PHP - вызов функции внутри другой функции - PullRequest
0 голосов
/ 24 февраля 2012

Я упоминал похожие вопросы, подобные этому, и поступил точно так же, как и следовало ожидать, но безуспешно.Поэтому я был бы признателен, если бы кто-нибудь мог помочь мне с этим

. У меня есть файл с именем view.php, который вызывает функцию из класса, основанного на условии переключения.Эта функция отображает вывод на странице с несколькими ссылками.При нажатии на ссылку он вызывает другую функцию, которая находится в моей первой функции.Но, очевидно, когда я нажимаю на ссылку, ничего не происходит.Это мой код.

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;
 }

Аналогичным образом вызывается другая функциявышеупомянутая функция, и т. д.

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

Поэтому, когда бы я ни щелкал по моей ссылке view report, я получаю добавленный идентификатор id в моей строке запроса, что-то вроде

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

В идеалесодержимое getSectionReport() должно быть напечатано, но это не так.Пожалуйста, укажите, что я делаю неправильно.

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 24 февраля 2012

Какой у вас основной метод для отображения всего? На данный момент у вас есть три функции, каждая из которых связана друг с другом различными способами, но не похоже, что вы сначала что-то создаете. Конечно, 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']);
0 голосов
/ 24 февраля 2012

Если вы обращаетесь к одноуровневой функции в том же классе, используйте:

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();
0 голосов
/ 24 февраля 2012

Если две функции являются частью класса (как намекает ваш комментарий выше), то вызов должен быть записан как

$this->getUserReport($id);
...