One way of doing this is you would have one main page (i.e. index.php).
Here, you would have all the code that stays the same from page to page (header, footer, etc.).
Then, in the 'content' area that changes, have something like the following:
switch ($_GET['content'])
{
case "news":
require('news.php');
break;
case "contact":
require('contact.php');
break;
case "home":
require('home.php');
break;
default:
require('home.php');
break;
}
In all of these files (news.php, etc.) have the content that change for each page.
The $GET variable is from the URL. When you see index.php?content=news, you can access the content variable with $GET['content']. So you would set up links to index.php?content=news, index.php?content=contact etc.
Be aware that doing what you want to do is typically not an optimal solution, especially in regards to SEO. I have always found it easier and less complicated to simply do what you do now. Have header and footer includes, and use them on every page. Doing it the above way can get confusing, especially as the number of pages on your site gets bigger.