2

我有一个文件,其中包含一个类以及类中的一些属性和方法。

我需要从另一个 php 文件访问该类的属性和方法。我想将文件包含在类中,但这不是这种情况的正确方法,因为该文件包含一些回声,它会生成 html,如果我包含该文件,则会在我不包含的文件中生成那些 html想,我只想访问旧的属性和方法。

4

3 回答 3

2

正如其他人所说,最好在他们自己的文件中定义类,只包含那个类并包含它。

someClass.php

<?php
class SomeClass{
    public __Construct(){
        echo "This is some class";
    }
}

在其他页面上,您只需包含并实例化该类。

<?php
include('someClass.php');
//do something

但是,如果由于某种原因您无法使用类修改页面,则可以使用输出缓冲来包含没有输出的页面。

<?php
//start a buffer
ob_start();
//include the page with class and html output.
include("PageWithClassAndHTMLOutput.php");
//end the buffer and discard any output
ob_end_clean();

$cls = new ClassFromIncludedPage();
$cls->someMethod();

这并不理想,因为您将设置/覆盖包含页面中定义的任何变量,解析整个页面并执行它所做的任何处理。我已经使用这种方法(不是用于课程,而是相同的想法)来执行诸如捕获包含的页面并在它已经被写入以显示在屏幕上时通过电子邮件发送它之类的事情。

于 2013-03-21T22:35:57.853 回答
1

所以,你的类有一个构造函数。删除类的构造函数并将类文件包含到您的页面中。实例化您的对象并调用您需要的属性或方法。

 $object->property;
 $object->method();
于 2013-03-21T22:14:47.513 回答
1

我将使用来自房地产网络应用程序的示例。例如,如果您想在属性类(希望通过属性 id 获取属性名称的合同类)之外的其他类中获取属性名称 - 基于 Laravel 5.3 PHP 框架

<?php namespace App\Http\Controllers\Operations; 
## THIS CONTROLLER - that wants to access content from another (adjacent) controller

use App\Http\Controllers\Operations\PropertiesController;

      Class ContractsController extends Controller{
            public function GetContractDetails() # a local method calling a method accessing other method from another class 
            { 
                $property_id = 13;
                $data['property_name'] = (new PropertiesController)->GetPropertyName($property_id); 
                return response()->json($data, 200);
            }  
        }


<?php namespace App\Http\Controllers\Operations; 
# OTHER CONTROLLER - that is accessed by a controller in need 

Class PropertiesController extends Controller {
    Class PropertiesController extends Controller{
        public function GetPropertyName($property_id) #method called by an adjacent class
        {
            return $property_name = 'D2/101/ROOM - 201';
        } 
    }
 }
于 2017-08-25T10:27:29.983 回答