php 클래스 멤버 함수에서 배열 반환은 어떻게 하나요?!
조회수 801회
class test{
private $one;
public function __construct($arr){
$this->one=$arr;
}
public function arr_return(){
$rm=$this->one;
return function() use($rm){
for($i=0; $i< count($rm); $i++)
{
return $rm;
}
};
}
}
$abc=['hello','bye'];
$ptr=new test($abc);
$str= $ptr->arr_return();
var_dump($str);
echo $str[0];
var_dump 를 사용해서 보니까
object(Closure)[2]
public 'static' =>
array (size=1)
'rm' =>
array (size=2)
0 => string 'hello' (length=5)
1 => string 'bye' (length=3)
public 'this' =>
object(test)[1]
private 'one' =>
array (size=2)
0 => string 'hello' (length=5)
1 => string 'bye' (length=3)
이렇게 잡히는데
echo 로 배열 하나 호출 해보니 오류가 납니다
왜 안나오는지 ㅠㅠ 클래스 멤버함수에세 echo 호출 말고 리턴값으로 받고싶은 경우에는 어떻게 해야 되나요?
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
private로 선언된 멤버변수도 클래스 내부에서는 자유롭게 가져다 쓸 수 있습니다.
따라서 아래와같이 간단하게 처리하시면 됩니다.
arr_return
함수만 변경하였습니다.class test{ private $one; public function __construct($arr){ $this->one=$arr; } public function arr_return(){ return $this->one; } } $abc=['hello','bye']; $ptr=new test($abc); $str= $ptr->arr_return(); echo $str[0];
$one
은private
로 선언된 멤버변수이니 아래와같은 코드는 작동하지 않겠죠?class test{ private $one; public function __construct($arr){ $this->one=$arr; } public function arr_return(){ return $this->one; } } $abc=['hello','bye']; $ptr=new test($abc); $str= $ptr->one; echo $str[0];
$one
을public
으로 선언하면 바로 접근해서 가져다 쓸 수도 있습니다.
다만 PHP같은 객체지향 언어에서는 캡슐화라는 약속이 있기 때문에 구조가 간단하거나 실수를 할 여지가 없는 경우를 제외하고는 대부분 해당 멤버 변수를 가져오거나 설정하는 함수를 따로 만들어서 사용합니다.class test{ public $one; public function __construct($arr){ $this->one=$arr; } } $abc=['hello','bye']; $ptr=new test($abc); $str= $ptr->one; echo $str[0];
추가로, 대부분의 PHP프로그래머들은 클래스 이름의 첫글자를 대문자로 적습니다.
(이를 PascalCase라고 합니다.)
또한 변수명과 함수명을 짓는 방법에 대한 약속도 있으니 이를 가능하면 준수해주시는게 다른 사람이 코드를 알아보기 편하게 할 수 있습니다.이해가 안되는 부분이 있다면 덧글로 남겨주세요.
- 헐 이럴수가 ... 그냥 함수에서도 저렇게 했었는데 부끄럽네요 ㅠㅠ 자동으로 포인터 된다는걸 까먹었네요 왜 그랬지; 암튼 답변 너무 감사합니다 아 그리고 대문자 잊지 않겠습니다 알려주셔서 감사합니다!!!!!!! 알 수 없는 사용자 2020.3.8 12:36
댓글 입력