2017-11-08 6 views
0

たぶん、あなたたちは私を助けることができる別の関数内からPHPの関数を呼び出す:私はこれを行うにしようとしています

public function index() 
{ 
    $r = array(); 
    //some code 
    echo json_encode($this->utf8ize($r)); 
} 

public function utf8ize($d) { 
    //some code 
    return $d; 
} 

をしかし、私はエラー「()未定義の関数utf8izeにコール」を得る

なぜ?

編集1:完全なコード

<?php 
defined('BASEPATH') OR exit('No direct script access allowed'); 
class Solicitud extends MX_Controller { 

public function __construct() 
{ 
    /* 
    parent::__construct(); 

    if(!$this->input->is_ajax_request()) 
    { 
     show_404(); 
     exit(); 
    } 
    else 
    { 
    */ 
     $this->load->model('Solicitud_model', 'Model'); 
    //} 
} 

public function index() 
{ 
    $bandera = $this->input->post('bandera'); 
    $r = array(); 
    if ($bandera == 1){ 
     $result = $this->Model->getConsulta($this->session->session_facultad_apps); 
     $r = array("data" => $result, 
      "success" => true, 
      "bandera" => $bandera); 
    }else if($bandera == 2) 
    { 
     $result = $this->Model->get($this->session->session_facultad_apps); 
     $r = array("data" => $result, 
      "success" => true, 
      "bandera" => $bandera); 

    }else if ($bandera == 3){ 
     $result = $this->Model->getAsigna($this->session->session_facultad_apps); 
     $r = array("data" => $result, 
      "success" => true, 
      "bandera" => $bandera); 
    } 


    echo json_encode(utf8ize($r)); 
} 

public function utf8ize($d) { 
    if (is_array($d)) { 
     foreach ($d as $k => $v) { 
      $d[$k] = utf8ize($v); 
     } 
    } else if (is_string ($d)) { 
     $d = iconv('UTF-8', 'ISO-8859-1', $d); 
     return utf8_encode($d); 
    } 
    return $d; 
} 
+0

あなたはどのフレームワークを使用していますか? MX_Controllerの定義を表示できます –

+0

最初の呼び出しからではなく、関数内の再帰呼び出しからエラーが発生しました。みんなありがとう。 – Esteban

答えて

1

thisは、オブジェクトの現在のインスタンスを参照するために使用されます。あなたのケースでは、再帰呼び出しのためのこれへの参照を逃した。

シンプルなソリューション - また、あなたのコードが正しいかのように見え、内側utf8izeコール

echo json_encode($this->utf8ize($r)); 

... 

public function utf8ize($d) { 
    if (is_array($d)) { 
     foreach ($d as $k => $v) { 
      $d[$k] = $this->utf8ize($v); 
     } 
    } else if (is_string ($d)) { 
     $d = iconv('UTF-8', 'ISO-8859-1', $d); 
     return utf8_encode($d); 
    } 
    return $d; 
} 
+1

OPのコードが正しいように見えます。何か怪しげなことが起こっているようだ。それはクラスです。あなたは '$ this'を使って非静的関数にアクセスします.. – Akintunde007

+0

私はすでにこれを試しても動作しません – Esteban

+0

$ this->黄色(関数)から灰色に色のフォントを変更するとちょっと変わってしまいます – Esteban

0

$this->を追加します。

しかし、私はクラスのdefenitionは表示されませんし、クラスを使用してあなたを見ることはできません。

ローカルマシン上で動作するクラスを作成しましたが、テストクラスのメソッドを呼び出すと、この関数は空の配列を返します。

<?php 
class Test 
{ 

    public function index() 
    { 
     $r = array(); 
     echo json_encode($this->utf8ize($r)); 
    } 

    public function utf8ize($d) 
    { 
     //some code 
     return $d; 
    } 
} 

$test = new Test(); 
echo $test->index(); 

public function index() 
{ 
    $r = array(); 
    //some code 
    } 

    function utf8ize($d) { 
     //some code 
    } 

    echo json_encode(utf8ize($r)); 
} 

私は、元の内側の機能を入れていた私は、これは:)

+0

このメソッドはフロントエンドから呼び出されているので、その部分が表示されず、$ this-> utf8ize($ r)を追加しても機能しません。すでに試してみました。 – Esteban

+0

フロントエンド? –

+0

私はExt js、Senchaの建築家を使用しています。 URLに関連付けられたストアを作成し、インデックス – Esteban

0

うーんない最良の答えを手を差し伸べること自由に感じていない場合は、助けを願っていますが、このコードは動作します関数

編集:エラーは再帰呼び出しからでした。最初のものではありません。

ありがとうございます!

関連する問題