Вызов функции в методе класса?
Я пытался выяснить, как это сделать, но я не совсем уверен, как это сделать.
Вот пример того, что я пытаюсь сделать:
class test {
public newTest(){
function bigTest(){
//Big Test Here
}
function smallTest(){
//Small Test Here
}
}
public scoreTest(){
//Scoring code here;
}
}
Вот часть, с которой у меня возникают проблемы, как я могу назвать bigTest()?
Ответы
Ответ 1
Попробуйте следующее:
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();
Ответ 2
Образец, который вы предоставили, недействителен PHP и имеет несколько проблем:
public scoreTest() {
...
}
не является объявлением функции - вам нужно объявить функции с ключевым словом "function".
Синтаксис должен быть скорее:
public function scoreTest() {
...
}
Во-вторых, обертывание функций bigTest() и smallTest() в public function() {} не делает их закрытыми - вы должны использовать личное ключевое слово по обоим из них отдельно:
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;
}
}
Кроме того, это соглашение, чтобы капитализировать имена классов в объявлениях классов ( "Тест" ).
Надеюсь, что это поможет.
Ответ 3
Я думаю, что вы ищете что-то вроде этого.
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();
Ответ 4
Чтобы вызвать любой метод объекта, созданного экземпляром класса (с инструкцией new), вам нужно "указать" на него. С внешней стороны вы просто используете ресурс, созданный новым оператором.
Внутри любого объекта PHP, созданного новым, сохраняется тот же ресурс в переменной $this.
Итак, внутри класса вы ДОЛЖНЫ указывать на метод $this.
В своем классе, чтобы вызвать smallTest
изнутри класса, вы должны указать PHP, какой из всех объектов, созданных новым оператором, который вы хотите выполнить, просто напишите:
$this->smallTest();
Ответ 5
Вам нужно вызвать newTest
, чтобы функции, объявленные внутри этого метода, были "видимыми" (см. Функции внутри функций). Но это только обычные функции и методы.
Ответ 6
Чтобы иметь "функцию внутри функции", если я понимаю, что вы просите, вам нужен PHP 5.3, где вы можете воспользоваться новой функцией Closure.
Итак, вы могли бы:
public function newTest() {
$bigTest = function() {
//Big Test Here
}
}
Ответ 7
class sampleClass
{
public function f1()
{
return "f1 run";
}
public function f2()
{
echo ("f2 run" );
$result = $this->f1();
echo ($result);
}
f2();
}
вывод:
f2 запустить
f1 запустить
Ответ 8
Вы также можете использовать self::CONST
вместо $this->CONST
, если вы хотите вызвать статическую переменную или функцию текущего класса.
Ответ 9
пример 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();
example2
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')
Ответ 10
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;
}
}