PHP-скрипт, позволяющий вызывать только одну функцию с параметром - PullRequest
0 голосов
/ 03 марта 2012

Я написал класс php с двумя функциями, но когда я вызываю функции внутри другого скрипта, он позволяет запускать только одну из двух функций.

это скрипт с функциями.

<?php

 define('RDFAPI_INCLUDE_DIR', 'rdfapi-php/api/');
 require_once('SimpleRdfParser.php');




 class retrieve{

 public $p;
 public $uri;
 public $rdf;

 function retrieve(){ 
   $this->p = new SimpleRdfParser();
   $this->uri = 'rdfs/crime.owl';
   $this->rdf = @file($this->uri);
}

function getName(){

 return "heyyy";
}

public function getL1Comment($type){
  /*
    this function gets the comments that are to do with the main type of crime i.e.       Sexual Offences
*/ 

if (is_array($this->rdf)) {
  $this->rdf = join('',  $this->rdf);
  if (is_array($data = $this->p->string2triples($this->rdf, $this->uri))) {

     $val = $data["http://localhost/".$type][2][1][0];

     return $val;
     exit;     
  }
 }

}

public function getChildComment($crime){

/*
  this function gets the comments from the child node of the main type of crime i.e. Rape of a Female aged 16 and over, 
  this is a child node of Sexual Offences
*/

if (is_array($this->rdf)) {
$this->rdf = join('',  $this->rdf);
if (is_array($data = $this->p->string2triples($this->rdf, $this->uri))) {

    $val = $data["http://localhost/".$crime][2][1][0];

    return $val;
    exit;     
   }
  }
 }




}

и это сценарий, который его вызывает:

<?php

 require('retrieve.php');

 $type = $_POST["type"];
 $crime = $_POST["crime"];

 $q = new retrieve();

echo $q->getL1Comment($type)."<br />";
//print($q->getL1Comment($type)."<br />");
print($q->getName());
//print($q->getName());
echo $q->getChildComment($crime);


?>

Кто-нибудь знает, почему это происходит?

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

Ответы [ 3 ]

2 голосов
/ 03 марта 2012

Вот почему:

Они оба делают это $this->rdf = join('', $this->rdf);

, и оба они зависят от этого:

if (is_array($this->rdf))

Итак, первое вызывает массивбольше не быть массивом.Таким образом, условное выражение второго метода завершится неудачей.

Попробуйте что-то вроде этого:

public function getL1Comment($type){
  /*
    this function gets the comments that are to do with the main type of crime i.e.       Sexual Offences
*/ 

  if (is_array($data = $this->p->string2triples(join('',  $this->rdf), $this->uri))) {
     $val = $data["http://localhost/".$type][2][1][0];

     return $val;
  }
}

таким образом, вы не переопределяете $ this-> rdf в методах, поскольку, как я вижу этонет причин делать это.

1 голос
/ 03 марта 2012

выход; <== это убивает его </p>

Попробуйте удалить выход из своей функции и вставьте его после завершения вызовов.

0 голосов
/ 03 марта 2012

у вас есть выход в вашей функции, поэтому он экранируется перед переходом к следующей функции

...