Chamar uma função dentro de um método de classe?
class test {
public newTest(){
function bigTest(){
//Big Test Here
}
function smallTest(){
//Small Test Here
}
}
public scoreTest(){
//Scoring code here;
}
}
Aqui está a parte com a qual estou a ter problemas, como é que chamo o bigTest()?
10 answers
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();
A amostra que forneceu não é válida para o PHP e tem alguns problemas:
public scoreTest() {
...
}
Não é uma declaração de função adequada -- você precisa declarar funções com a palavra-chave' função'.
A sintaxe deve ser:
public function scoreTest() {
...
}
Em segundo lugar, envolver as funções bigTest() e smallTest () na função pública () {} não as torna privadas - você deve usar a palavra-chave privada em ambos individualmente:
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;
}
}
Além disso, é Convenção capitalizar nomes de classes em declarações da classe ("ensaio").
Espero que isso ajude.
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();
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;
}
}
É necessário chamar newTest
para tornar as funções declaradas dentro desse método "visíveis" (ver funções dentro das funções). Mas isso são apenas funções normais e sem métodos.
A fim de ter uma "função dentro de uma função", se eu entender o que você está pedindo, você precisa de PHP 5.3, onde você pode tirar proveito do novo recurso de encerramento.
Então podias ter ...public function newTest() {
$bigTest = function() {
//Big Test Here
}
}
Para chamar qualquer método de um objeto instanciado a partir de uma classe (com Declaração nova), você precisa "apontar" para ela. Do lado de fora você apenas usa o recurso criado pela nova declaração.
Dentro de qualquer objeto PHP criado por new, grava o mesmo recurso na $this variable.
Então, dentro de uma aula você deve apontar para o método por $isso.
Em sua classe, para chamar smallTest
de dentro da classe, você deve dizer ao PHP qual de todos os objetos criados pela nova declaração que você deseja executar, apenas escrever:
$this->smallTest();
Exemplo 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();
Exemplo 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')
Também pode usar self::CONST
em vez de $this->CONST
se quiser chamar uma variável estática ou uma função da classe actual.
class sampleClass
{
public function f1()
{
return "f1 run";
}
public function f2()
{
echo ("f2 run" );
$result = $this->f1();
echo ($result);
}
f2();
}
Resultado:
F2 executar F1 run