我一直试图弄清楚如何去做,但我不太清楚如何。
这是我想要做的一个例子:
class test {
public newTest(){
function bigTest(){
//Big Test Here
}
function smallTest(){
//Small Test Here
}
}
public scoreTest(){
//Scoring code here;
}
}
以下是我遇到问题的部分,如何调用bigTest()?
答案 0 :(得分:191)
试试这个:
class test {
public function newTest(){
$this->bigTest();
$this->smallTest();
}
private function bigTest(){
//Big Test Here
}
private function smallTest(){
//Small Test Here
}
public function scoreTest(){
//Scoring code here;
}
}
$testObject = new test();
$testObject->newTest();
$testObject->scoreTest();
答案 1 :(得分:18)
您提供的示例不是有效的PHP并且存在一些问题:
public scoreTest() {
...
}
不是正确的函数声明 - 您需要使用'function'关键字声明函数。
语法应该是:
public function scoreTest() {
...
}
其次,将publicTest()和smallTest()函数包装在public function(){}中并不会使它们变为私有 - 您应该在这两个函数中单独使用private关键字:
class test () {
public function newTest(){
$this->bigTest();
$this->smallTest();
}
private function bigTest(){
//Big Test Here
}
private function smallTest(){
//Small Test Here
}
public function scoreTest(){
//Scoring code here;
}
}
此外,通常在类声明('Test')中大写类名。
希望有所帮助。
答案 2 :(得分:8)
我认为你正在寻找类似这样的东西。
class test {
private $str = NULL;
public function newTest(){
$this->str .= 'function "newTest" called, ';
return $this;
}
public function bigTest(){
return $this->str . ' function "bigTest" called,';
}
public function smallTest(){
return $this->str . ' function "smallTest" called,';
}
public function scoreTest(){
return $this->str . ' function "scoreTest" called,';
}
}
$test = new test;
echo $test->newTest()->bigTest();
答案 3 :(得分:6)
class test {
public newTest(){
$this->bigTest();
$this->smallTest();
}
private function bigTest(){
//Big Test Here
}
private function smallTest(){
//Small Test Here
}
public scoreTest(){
//Scoring code here;
}
}
答案 4 :(得分:4)
要调用从类实例化的对象的任何方法(使用statement new),您需要“指向”它。从外部您只需使用新语句创建的资源。
在由new创建的任何PHP对象内部,将相同的资源保存到$ this变量中。
所以,在一个类中,你必须通过$ this指向该方法。
在你的类中,要从类中调用smallTest
,你必须告诉PHP要执行的新语句创建的所有对象中的哪一个,只需写:
$this->smallTest();
答案 5 :(得分:3)
您需要调用newTest
以使该方法内声明的函数“可见”(请参阅Functions within functions)。但那只是正常的功能而没有方法。
答案 6 :(得分:3)
为了拥有“功能中的功能”,如果我理解你所要求的,你需要PHP 5.3,你可以利用新的Closure功能。
所以你可以:
public function newTest() {
$bigTest = function() {
//Big Test Here
}
}
答案 7 :(得分:3)
class sampleClass
{
public function f1()
{
return "f1 run";
}
public function f2()
{
echo ("f2 run" );
$result = $this->f1();
echo ($result);
}
f2();
}
输出:
f2跑 f1运行
答案 8 :(得分:1)
如果要调用当前类的静态变量或函数,也可以使用self::CONST
代替$this->CONST
。
答案 9 :(得分:0)
示例1
class TestClass{
public function __call($name,$arg){
call_user_func($name,$arg);
}
}
class test {
public function newTest(){
function bigTest(){
echo 'Big Test Here';
}
function smallTest(){
echo 'Small Test Here';
}
$obj=new TestClass;
return $obj;
}
}
$rentry=new test;
$rentry->newTest()->bigTest();
<强>示例2 强>
class test {
public function newTest($method_name){
function bigTest(){
echo 'Big Test Here';
}
function smallTest(){
echo 'Small Test Here';
}
if(function_exists( $method_name)){
call_user_func($method_name);
}
else{
echo 'method not exists';
}
}
}
$obj=new test;
$obj->newTest('bigTest')