Я правильно переписываю свою проблему: у меня есть несколько файлов, и я хочу, чтобы в моем проекте один файл управлял всеми этими файлами, а затем я включаю только этот файл в индекс, и после использования функций класса каждая функция имеет здесь собственный файл и коды


<?php

interface Kernel_files_func {
    public function cfg_Adm_kernel();
    public function cfg_aspect();   
    public function cfg_class($class);  
    public function cfg_files();    
    public function cfg_function();     
    public function cfg_mysql($db,$host,$user,$PsUser,$t);          
    }
final class kernel implements Kernel_files_func{    
        public function cfg_Adm_kernel(){
            include_once("cfg_Adm_kernel.php");
                #return new c();
            }
        public function cfg_aspect(){
            include_once("cfg_Adm_kernel.php");

            }   
        public function cfg_class($class){
            include_once("cfg_class.php");
                return new $class();
            }   
        public function cfg_files(){
            include_once("cfg_files.php");

            }   
        public function cfg_function(){
            include_once ("cfg_function.php");

            }       
        public function cfg_mysql($db,$host,$user,$PsUser,$t){
            include_once("cfg_mysql.php");
        $this->DBS =  new  DBmSQL($db,$host,$user,$PsUser,$t);
                 return $this->DBS;
            }
        public function new_table($type,$name,$array){
                $this->DBS->create($type,$name,$array);
            }           
    }

            ?>

Теперь в другом файле, например cfg_class.php

     <?PHP


       class Home {
       function test(){
        echo "Seccesse";
       }    
    }
      class membership {

    }
             //....     
             ?>

Теперь в моем index.php:

<?PHP
     include ("cfg_system.php");
     $system = new kernel(); 
          $system->cfg_class("Home")->test();
      // after this i can call the other class of cfg_class.php without
       // using  $system->cfg_class("class name")->func name();
      ?>

Я хочу, чтобы мой класс ядра управлял всеми кодами, я хочу, чтобы только мой класс ядра мог открывать мой класс и ... я знаю, что мне просто нужно использовать $ system-> cfg_class ... без использования его, как $ test = new ....; но я хочу сделать свой класс ядра настоящим ядром для моего проекта ....

-1
user136389 5 Май 2014 в 15:50

3 ответа

Лучший ответ

Как я вижу, вы пытаетесь включить функцию в объявление класса. Это можно сделать, используя обычное наследование с использованием ключевого слова "Implements" ... Но если мы будем придерживаться вашего случая, я бы посоветовал вам поместить код функции во включенный файл вместо объявления функции, чтобы вы могли объявите его так, как хотите, в разных файлах, например:

Файл func.php

<?php
    echo "HELLO WORLD";
?>

Файл inc.php

<?php 
class _includes_ { 
    function inc_test(){
        include_once("func.php");
    }
}
?>

Файл test.php

<?php
include"inc.php";
$inc = new _includes_();
$inc->inc_test();  
# after this line, the function won't work as it has not been defined...
# any more if i use it  .... 
test(); // like here ... 
function test(){
    include("func.php");
}
//Now that I declared the function test(), I can use it...
test();
?>

Обратите особое внимание на include и include_once ... include_once означает, что файл может быть включен только один раз за выполнение, поэтому я использовал include вместо include_once в приведенном выше примере.

1
Salketer 5 Май 2014 в 12:25

Думаю, решения этой проблемы нет. Это похоже на плохой обходной путь, а не на настоящую проблему. Как @ N.B. сказал, это выглядит как классический случай проблемы XY < / а> .

На самом деле вы просите «переопределить» функцию. У PHP нет метода для этого (см. Переопределение функции PHP?), и есть очень хороший причина этого: если test()func.php) не то же самое, что test() (второй экземпляр), (по крайней мере) одна из функций не должна вызываться test(). Переименование функции (ей) - хорошая идея.

Вместо этого поделитесь своей реальной проблемой.

3
Community 23 Май 2017 в 11:54

Похоже, вам нужно пересмотреть свое решение. Я предлагаю вам выбрать что-то более стандартное, например следующее:

/* func.class.php */
class MyFunc {
    public test () {
        ...
    }
}

/* sample usage */
include 'func.class.php';
$func = new MyFunc();
$func->test();

/* if you don't need it anymore */
$func = null;

/* to avoid errors */
if ( 'MyClass' === get_class($func) ) {
    $func->test();
}
0
Mahdi 5 Май 2014 в 13:03