我有一个带有类的文件以及类中的一些属性和方法。
我需要从另一个php文件访问该类的属性和方法。我希望将该文件包含在类中,但这不是一种正确的方法,因为该文件包含一些echo,它生成html,如果我包含该文件将在orher文件中生成那些html,我不会想要,我只想访问旧的属性和方法。
答案 0 :(得分:1)
正如其他人所说的那样,最好在自己的文件中定义类,除了该类之外什么都包含它。
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();
这并不理想,因为您将设置/覆盖包含页面中定义的任何变量,解析整个页面并执行它所执行的任何处理。我已经使用过这种方法(不是用于类,但是同样的想法)来捕获包含的页面,并在它已经被写入屏幕时显示给它发送电子邮件。
答案 1 :(得分:0)
所以,你的类有一个构造函数。删除类的构造函数并将类文件包含到页面中。实例化您的对象并调用您需要的属性或方法。
$object->property;
$object->method();
答案 2 :(得分:0)
我将使用房地产网络应用程序中的示例。例如,如果你想在其他类中获取属性名而不是属性类(一个想要通过属性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';
}
}
}